2013-03-11 61 views
2

我有一個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」值的所有時間。我在這裏錯過了什麼?

回答

0

我結束了重新命名的代碼構成了我自定義的文化所以像en-XX。我還必須定義TwoLetterISOLanguageNameThreeLetterISOLanguageName,並且它已正確註冊。

0

我知道這聽起來很簡單,這是一個老舊的線程,但你嘗試重新啓動?

你的代碼看起來不錯。

我有完全相同的問題,新的自定義文化(區域設置)正在創建,但沒有被應用於正確名稱的資源文件。重新啓動是應用設置更改的唯一方法。

唯一要檢查的其他事情是,您使用管理員權限運行 - 因爲您需要這些來創建新的區域設置。

在這裏看到:

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