Sam*_*aik 3 .net c# visual-studio windows-8.1 windows-10
我最近从一台装有Windows 10 VS 2017的计算机转移到了一台装有Windows 8.1 VS 2017的计算机。我正在使用一段类似这样的代码。
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(locale);
在这里,locale值是en-EN。当此CultureNotFoundException消息引发异常时,我感到惊讶。
en-EN是无效的区域性标识符。
令我感到诧异,因为,同样的代码locale为en-EN在Windows 10的作品。
我已经检查了一些解决方案。Windows 8.1是否不支持某些语言环境?可以添加缺少的语言环境吗?或者,这是与操作系统完全无关的问题。任何帮助表示赞赏!
是的,en-EN实际上是无效的文化标识符。但是,在Windows 10中,处理无效标识符的行为有所改变。
您基本上有两个选择:
en-GBen-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");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2328 次 |
| 最近记录: |