我有一个 ASP.NET MVC 4 项目,并且我已经在其中注册了自定义文化,因为我想要一个特定于客户端的翻译。
我用类似的参数调用下面的辅助方法RegisterCulture("en-GB-CustA", "English (Customer A)", "en-GB");
这个调用是在类的Application_Start
事件处理程序中完成的MvcApplication : HttpApplication
。
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
不幸的是,即使在我一直获得详细的“Hello world”值之前,我已经将自定义文化设置为所描述的。我在这里想念什么?