2

ASP.NET MVC 4 プロジェクトがあり、クライアント固有の翻訳が必要なため、カスタム カルチャを登録しました。

RegisterCulture("en-GB-CustA", "English (Customer A)", "en-GB");This call is done in Application_Startevent handler of MvcApplication : HttpApplicationclass.のようなパラメーターを使用して、次のヘルパー メソッドを呼び出します。

private static void RegisterCulture(string cultureCode, string cultureName, string baseCultureCode)
{
    var ci = new CultureInfo(baseCultureCode);
    var ri = new RegionInfo(ci.Name);
    var builder = new CultureAndRegionInfoBuilder(cultureCode, CultureAndRegionModifiers.None);
    builder.LoadDataFromCultureInfo(ci);
    builder.LoadDataFromRegionInfo(ri);

    builder.CultureEnglishName = cultureName;
    builder.CultureNativeName = cultureName;

    try
    {
        builder.Register();
    }
    catch (InvalidOperationException)
    {

    }
}

その方法は非常にシンプルで、基本的には既存の文化に基づいて新しい文化を作成し、その名前を置き換えます。

テスト目的で、Global.asax に次のコードをMvcApplicationクラスに追加して、現在のスレッドをカスタムスレッドに切り替えました。

protected void Application_AcquireRequestState(object sender, EventArgs e)
{
    var ci = new CultureInfo("en-GB-CustA");

    Thread.CurrentThread.CurrentUICulture = ci;
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
}

また、2 つのリソース ファイルも含めました。Test.resx1 つはデフォルトのテキスト用に呼び出され、2 番目はTest.en-GB-CustA.resxです。Title2 つの異なる値で呼び出される単純な文字列リソースを追加しました。

Test.resx => "Hello World!"
Test.en-GB-CustA => "Hello from custom culture!"

また、ビューの 1 つにこのタイトルを表示するためのコードを追加しました (簡単にするために、両方のリソース ファイルにViewRess を追加しました)。CustomToolNamespace

@ViewRes.Test.Title

残念ながら、カスタム カルチャを説明どおりに設定したにもかかわらず、常に「Hello world」という値を取得しています。ここで何が欠けていますか?

4

2 に答える 2

0

とても単純に聞こえると思いますが、これは古いスレッドですが、再起動を試みましたか?

あなたのコードは問題ないようです。

私はまったく同じ問題を抱えていました。新しいカスタム カルチャ (ロケール) は正しく作成されていましたが、正しい名前のリソース ファイルに対して適用されていませんでした。設定変更が適用されたのは再起動だけでした。

他に確認すべき唯一のことは、新しいロケールを作成するために管理者権限が必要なため、管理者権限で実行していることです。

ここを参照してください:

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx

于 2013-06-13T14:15:50.957 に答える
0

カスタム カルチャからコードの名前を変更することになりましたen-XX。また、両方を定義する必要がTwoLetterISOLanguageNameありThreeLetterISOLanguageName、適切に登録されました。

于 2013-06-14T13:51:44.937 に答える