可以在本地开发机器上为en-en创建文化

本文关键字:en-en 创建 文化 机器 开发 | 更新日期: 2023-09-27 18:25:56

我刚刚将应用程序部署到azure暂存环境中,遇到了不支持en-EN区域性的问题。经过一番挖掘,我发现没有这样的文化,我应该使用en-GBen-US

但是,现在来谈谈我的问题。在我的本地开发机器上,我用en-EN创建CultureInfo没有问题。

CultureInfo ci = new CultureInfo("en-EN"); 
Console.WriteLine("culture: "+ ci.ThreeLetterISOLanguageName);

输出culture: eng

我还尝试用CultureInfo.GetCultures(CultureTypes.AllCultures);枚举所有培养基,结果中没有相应的en-EN培养基。

那么,发生了什么,为什么我可以创造一种不应该存在的文化?

可以在本地开发机器上为en-en创建文化

如果您使用的是Windows 10,区域性行为已经改变:"未知",但"可能存在"的区域性(3个字母的iso)只会导致LCID为4096的"unkown locale"区域性。在Windows 10之前,这将导致异常(除非您安装了这样的自定义区域性)

MSDN链接

        try
        {

            // ok
            CultureInfo culture1 = new CultureInfo("foo");
            CultureInfo culture2 = new CultureInfo("xyz");
            CultureInfo culture3 = new CultureInfo("en-xy");
            // not ok - exception
            CultureInfo culture4 = new CultureInfo("foox");
        }
        catch (Exception exc)
        {
        }

如文档所述:

从在Windows 7或更高版本上运行的.NET Framework 4或更新版本下的应用程序开始,该方法尝试从操作系统中检索标识符为名称的CultureInfo对象如果操作系统不支持该区域性,并且name不是补充或替换区域性的名称,则该方法将抛出CultureNotFoundException异常

因此,基本上,您的操作系统将en-EN作为现有区域性的替代名称(更可能是en-US),而它不在Azure虚拟机上。

解决方案是:使用真实的区域性名称(您可以在此处找到)