区域设置 en-EN 是无效的文化标识符
The locale en-EN is an invalid culture identifier
我最近从一台装有 Windows 10 和 VS 2017 的计算机转移到一台装有 Windows 8.1 和 VS 2017 的计算机。
我正在处理一段代码,它有这样一行。
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(locale);
此处,locale
值为en-EN
。当这引发 CultureNotFoundException
异常并显示一条消息时,我感到很惊讶。
en-EN is an invalid culture identifier.
令我惊讶的是,locale
与 en-EN
相同的代码在 Windows 10.
中有效
我已经检查了一些解决方案。
Windows 8.1 是否不支持某些语言环境?可以添加缺少的语言环境吗?
或者,这是一个与 OS 完全无关的问题。感谢您的帮助!
是的,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");
我最近从一台装有 Windows 10 和 VS 2017 的计算机转移到一台装有 Windows 8.1 和 VS 2017 的计算机。
我正在处理一段代码,它有这样一行。
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(locale);
此处,locale
值为en-EN
。当这引发 CultureNotFoundException
异常并显示一条消息时,我感到很惊讶。
en-EN is an invalid culture identifier.
令我惊讶的是,locale
与 en-EN
相同的代码在 Windows 10.
我已经检查了一些解决方案。 Windows 8.1 是否不支持某些语言环境?可以添加缺少的语言环境吗? 或者,这是一个与 OS 完全无关的问题。感谢您的帮助!
是的,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");