ASP.NET MVC 4 プロジェクトがあり、クライアント固有の翻訳が必要なため、カスタム カルチャを登録しました。
RegisterCulture("en-GB-CustA", "English (Customer A)", "en-GB");
This call is done in Application_Start
event handler of MvcApplication : HttpApplication
class.のようなパラメーターを使用して、次のヘルパー メソッドを呼び出します。
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.resx
1 つはデフォルトのテキスト用に呼び出され、2 番目はTest.en-GB-CustA.resx
です。Title
2 つの異なる値で呼び出される単純な文字列リソースを追加しました。
Test.resx => "Hello World!"
Test.en-GB-CustA => "Hello from custom culture!"
また、ビューの 1 つにこのタイトルを表示するためのコードを追加しました (簡単にするために、両方のリソース ファイルにViewRes
s を追加しました)。CustomToolNamespace
@ViewRes.Test.Title
残念ながら、カスタム カルチャを説明どおりに設定したにもかかわらず、常に「Hello world」という値を取得しています。ここで何が欠けていますか?