我有一個ASP.NET MVC 4項目,我已經註冊了它的自定義文化,因爲我想要一個客戶特定的翻譯。ASP.NET MVC註冊自定義文化和國際化
我使用參數RegisterCulture("en-GB-CustA", "English (Customer A)", "en-GB");
調用以下幫助方法此調用在MvcApplication : HttpApplication
類的Application_Start
事件處理程序中完成。
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);
}
我還包括兩個資源文件。其中一個名稱爲Test.resx
,默認文本爲第二個,Test.en-GB-CustA.resx
。我添加了一個簡單的字符串資源,名爲Title
,有兩個不同的值。
Test.resx => "Hello World!"
Test.en-GB-CustA => "Hello from custom culture!"
我也把我的觀點的一個代碼,以顯示這個標題(我已經添加ViewRes
爲s CustomToolNamespace
爲簡化這兩個資源文件)。
@ViewRes.Test.Title
可惜的是,即使我已經設置了自定義的文化descibed我得到detault之前的「Hello world」值的所有時間。我在這裏錯過了什麼?