gpt4 book ai didi

c# - 区域设置 en-EN 是无效的文化标识符

转载 作者:行者123 更新时间:2023-11-30 14:46:03 29 4
gpt4 key购买 nike

我最近从一台装有 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.

令我惊讶的是,localeen-EN 相同的代码在 Windows 10 中也能正常工作。

我已经检查了一些解决方案。Windows 8.1 是否不支持少数语言环境?可以添加缺少的语言环境吗?或者,这是一个与操作系统完全无关的问题。感谢您的帮助!

最佳答案

是的,en-EN 确实是一个无效的文化标识符。但是,在 Windows 10 中处理无效标识符的行为 changed a bit .

你基本上有两个选择:

  1. 使用有效的标识符。对于英国的英语,您应该使用 en-GB
  2. 如果您想要的英格兰文化与 en-GB 不同,请注册一种新文化。

这是注册新文化的方法:

文化具有层次结构,其中根始终是 CultureInfo.InvariantCulture。按照惯例,区域性名称反射(reflect)了这种层次结构。因此,例如,en-GB 是一种区域特定(英国)文化,它派生自 en,这是一种独立于区域的英语文化,其parent 是不变的文化。

如果你想创建一种源自 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");

关于c# - 区域设置 en-EN 是无效的文化标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50810120/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com