System.Globalization.CultureNotFoundException:不支持Culture。参数名称:name en-US-biz是无效的区域性标识符

时间:2017-08-15 18:19:43

标签: .net azure c#-4.0

当我为翻译的使用创造新的文化时,我遇到了一个问题。我当前的问题是Windows不允许应用程序访问这种文化似乎是的文件夹。在我们的本地机器中,我们可以将Visual Studio作为管理员,然后我们对此没有任何问题,但由于我们使用Azure部署我的应用程序,我不知道如何允许访问有问题的文件夹,因此我们得到此异常: System.Globalization.CultureNotFoundException:不支持Culture。参数名称:name en-US-biz是无效的区域性标识符。

当我们更新用户语言代码的下一部分时出现异常:

    var currentUserLanguage = 'en-US-biz';
    IocContainer.SetCurrentUserLanguage(currentUserLanguage);

    var ci = domCultureLanguage != null ? domCultureLanguage.CultureInfo : new CultureInfo(currentUserLanguage);

    Thread.CurrentThread.CurrentUICulture = ci;
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);

在行中:new CultureInfo(currentUserLanguage)是我得到异常的地方。

我们在global.asax文件中注册文化:

private void LoadCultureManager()
{
    BizCultureEn.Register();
    BizCultureEs.Register();
}

我们已经建立了2个不同的文化类+ rsex各自的文件。

例如BizCultureEn类:

public static class BizCultureEn
{
    //"es-ES-custom" need to match with Translations.es-ES-custom.resx
    public static string CustomCultureName = "en-US-biz";
    public static CultureInfo CultureInfo { get; set; }

    public static void Register()
    {
        // Create a custom culture for ru-US.
        CultureAndRegionInfoBuilder builder = new CultureAndRegionInfoBuilder(CustomCultureName, CultureAndRegionModifiers.None);
        CultureInfo = CultureInfo.CreateSpecificCulture(CustomCultureName);
        builder.LoadDataFromCultureInfo(CultureInfo);
        builder.CultureEnglishName = "Biz English (United States)";
        builder.CultureNativeName = "Biz English (United States)";

        builder.ThreeLetterISOLanguageName = "ben";
        builder.ThreeLetterWindowsLanguageName = "ben";
        builder.TwoLetterISOLanguageName = "bn";

        builder.RegionEnglishName = "Biz English";
        builder.ThreeLetterISORegionName = "USA";
        builder.ThreeLetterWindowsRegionName = "USA";
        builder.TwoLetterISORegionName = "US";

        // Register the culture.
        try
        {
            builder.Register();
        }
        catch (InvalidOperationException ex)
        {
            var ex1 = ex;
            // Swallow the exception: the culture already is registered.
        }

        // Use the custom culture.
        //CultureInfo = CultureInfo.CreateSpecificCulture(CustomCultureName);
        Thread.CurrentThread.CurrentCulture = CultureInfo;
        Thread.CurrentThread.CurrentUICulture = CultureInfo;
    }
}

1 个答案:

答案 0 :(得分:0)

您可以通过Kudu访问“Debug console> PowerShell”来运行[system.Globalization.CultureInfo]::GetCultures('AllCultures')命令来检索所有文化。

此外,据我所知,当我们调用CultureAndRegionInfoBuilder.Register方法注册自定义文化时,注册过程将创建.nlp文件并将.nlp文件存储在%windir%中\ Globalization 系统目录,需要管理权限。如果我们在Azure Web应用程序上执行此操作,这将导致访问权限相关问题。您可以尝试remote debug your web app检查注册自定义文化时是否发生任何异常。

如果注册自定义文化在Azure Web App sandbox上无法正常工作,您可以尝试其他托管选项(例如虚拟机)。