我刚刚将我们的应用程序部署到我们的azure staging环境中,并遇到了en-EN
文化不受支持的问题。经过一番挖掘后,我发现没有这样的文化,我应该使用en-GB
或en-US
代替。
但是,现在我的问题。在我的本地开发机器上,使用CultureInfo
创建en-EN
时没有任何问题。
CultureInfo ci = new CultureInfo("en-EN");
Console.WriteLine("culture: "+ ci.ThreeLetterISOLanguageName);
输出culture: eng
我还尝试使用CultureInfo.GetCultures(CultureTypes.AllCultures);
枚举所有文化,结果中没有相应的en-EN
文化。
那么,发生了什么,为什么我要创造一种不应该存在的文化呢?
答案 0 :(得分:0)
如果您使用的是Windows 10,则文化行为已发生变化:"未知",但"可能已存在"文化(3个字母的iso)只会导致" Unkown locale"用LCID 4096培养。 在Windows 10之前,这将导致异常(除非您已经安装了这样的自定义文化)
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)
{
}
答案 1 :(得分:0)
正如documentation所述:
从在Windows 7或更高版本的.NET Framework 4或更高版本下运行的应用程序开始,该方法尝试从操作系统中检索其标识符为name的CultureInfo对象; 如果操作系统不支持该文化,并且name不是补充或替换文化的名称,则该方法将抛出CultureNotFoundException异常。
基本上,您的操作系统有en-EN
作为现有文化的替代名称(更可能是en-US
),而Azure VM上则没有。{/ p>
解决方案是:使用真实的文化名称(您可以找到here)