我最近从具有VS 2017的Windows 10的计算机转移到具有VS 2017的Windows 8.1的计算机。
我正在处理一段有这样一行的代码。
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(locale);
此处,locale
值为en-EN
。当有一条消息引发CultureNotFoundException
异常时,我惊讶地发现了。
en-EN是无效的文化标识符。
令我感到惊讶的是,locale
与en-EN
相同的代码在Windows 10中有效。
我已经检查了一些解决方案。 Windows 8.1不支持一些语言环境吗?可以添加缺少的区域设置吗? 或者,这是一个与操作系统完全无关的问题。任何帮助表示赞赏!
答案 0 :(得分:4)
是的,en-EN
实际上是一个无效的文化标识符。但是,在Windows 10中处理无效标识符changed a bit的行为。
您基本上有两种选择:
en-GB
en-GB
不同,请注册新文化。这是您注册新文化的方式:
文化具有层次结构,其中根始终为CultureInfo.InvariantCulture
。传统上,文化名称反映了这种等级。因此,例如,en-GB
,这是一个特定地区(英国)文化,来自en
,这是一个独立于地区的英国文化,其父母是不变的文化。
如果您想要创建源自en-GB
的特定英格兰文化,那么您应该将其称为en-GB-England
var parent = CultureInfo.GetCultureInfo("en-GB");
var builder = new CultureAndRegionInfoBuilder("en-GB-England", CultureAndRegionModifiers.None);
builder.LoadDataFromCultureInfo(parent);
builder.LoadDataFromRegionInfo(new RegionInfo(parent.Name));
builder.Parent = parent;
builder.CultureEnglishName = "English (Great Britain, England)";
builder.CultureNativeName = builder.CultureEnglishName;
try
{
builder.Register();
}
catch (UnauthorizedAccessException e)
{
// You must run this code with Administrator rights
throw;
}
catch (InvalidOperationException e) when (e.Message.Contains("already exists"))
{
// culture is already registered
}
var enEN = CultureInfo.GetCultureInfo("en-GB-England");