首页 文章

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

提问于
浏览
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();
}

我们已经 Build 了两个不同的文化类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

    您可以通过从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上注册自定义文化无法正常工作,则可以尝试其他托管选项(如虚拟机) .

相关问题