サーチ…


備考

ASP.NETページのスマートな国際化

このアプローチの利点は、コントローラや他のクラスを.resxファイルから値を参照するコードで混乱させる必要がないことです。 HttpModuleは.poファイルの翻訳を探して区切られたテキストを置き換えます。変換が見つかった場合、 HttpModuleは変換を置き換えます。翻訳が見つからない場合は、三角括弧が削除され、翻訳されていない元のテキストがページに表示されます。

.poファイルは、アプリケーションの翻訳を提供するための標準的な形式であるため、それらを編集するために利用できるいくつかのアプリケーションがあります。 .poファイルを技術者以外のユーザーに送信して、翻訳を追加することは簡単です。

基本的な設定とセットアップ

  1. MVCプロジェクトにI18Nナゲットパッケージを追加します。
  2. web.configで、 <httpModules> <modules>セクションまたは<modules>セクションにi18n.LocalizingModuleを追加します。
<!-- IIS 6 -->
<httpModules>
  <add name="i18n.LocalizingModule" type="i18n.LocalizingModule, i18n" />
</httpModules>

<!-- IIS 7 -->
<system.webServer> 
  <modules>
    <add name="i18n.LocalizingModule" type="i18n.LocalizingModule, i18n" />
  </modules>
</system.webServer>
  1. "locale"という名前のフォルダをサイトのルートに追加します。サポートする各カルチャーのサブフォルダを作成します。たとえば、 /locale/fr/ます。
  2. 各カルチャー固有のフォルダにmessages.poという名前のテキストファイルを作成しmessages.po
  3. テストの目的で、 messages.poファイルに次のテキスト行を入力します。
#: Translation test
msgid "Hello, world!"
msgstr "Bonjour le monde!"
  1. プロジェクトに変換するテキストを返すコントローラを追加します。
using System.Web.Mvc;

namespace I18nDemo.Controllers
{
    public class DefaultController : Controller
    {
        public ActionResult Index()
        {
            // Text inside [[[triple brackets]]] must precisely match
            // the msgid in your .po file.
            return Content("[[[Hello, world!]]]");
        }
    }
}
  1. MVCアプリケーションを実行し、 http:// localhost:[yourportnumber] / defaultなどのコントローラアクションに対応するルートを参照します
    URLがデフォルトのカルチャを反映するように変更されていることを確認してください。
    http:// localhost:[yourportnumber] / en / default
  2. URLに/en//fr/ (またはあなたが選択した文化)と置き換えます。ページには翻訳されたテキストが表示されます。
  3. ブラウザの言語設定を変更して別のカルチャを優先し、 /default再度参照してください。代替カルチャーを反映するようにURLが変更され、翻訳されたテキストが表示されることを確認してください。
  4. web.configでは、ユーザーがlocaleフォルダを参照できないようにハンドラを追加します。
<!-- IIS 6 -->
<system.web>
  <httpHandlers>
    <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
  </httpHandlers>
</system.web>

<!-- IIS 7 -->
<system.webServer>
  <handlers>
    <remove name="BlockViewHandler"/>
   <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/>
  </handlers>
</system.webServer>


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow