2

我有一个 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”值之前,我已经将自定义文化设置为所描述的。我在这里想念什么?

4

2 回答 2

0

我知道这听起来很简单,这是一个古老的线程,但是您尝试过重新启动吗?

你的代码看起来不错。

我遇到了完全相同的问题,新的自定义文化(语言环境)正在正确创建,但没有应用于正确名称的资源文件。重新启动是应用设置更改的唯一方法。

唯一要检查的另一件事是您是否以管理员权限运行 - 因为您需要这些权限来创建新的语言环境。

看这里:

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

于 2013-06-13T14:15:50.957 回答
0

我最终将代码从我的自定义文化中重命名为en-XX. 我还必须定义两者TwoLetterISOLanguageNameThreeLetterISOLanguageName并且它已正确注册。

于 2013-06-14T13:51:44.937 回答