2013-03-11 105 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