可以在本地开发机器上为en-en创建文化
本文关键字:en-en 创建 文化 机器 开发 | 更新日期: 2023-09-27 18:25:56
我刚刚将应用程序部署到azure暂存环境中,遇到了不支持en-EN
区域性的问题。经过一番挖掘,我发现没有这样的文化,我应该使用en-GB
或en-US
。
但是,现在来谈谈我的问题。在我的本地开发机器上,我用en-EN
创建CultureInfo
没有问题。
CultureInfo ci = new CultureInfo("en-EN");
Console.WriteLine("culture: "+ ci.ThreeLetterISOLanguageName);
输出culture: eng
我还尝试用CultureInfo.GetCultures(CultureTypes.AllCultures);
枚举所有培养基,结果中没有相应的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虚拟机上。
解决方案是:使用真实的区域性名称(您可以在此处找到)