区域设置en-EN是无效的区域性标识符

时间:2018-06-12 05:59:23

标签: c# .net visual-studio windows-10 windows-8.1

我最近从具有VS 2017的Windows 10的计算机转移到具有VS 2017的Windows 8.1的计算机。 我正在处理一段有这样一行的代码。 Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(locale);

此处,locale值为en-EN。当有一条消息引发CultureNotFoundException异常时,我惊讶地发现了。

  

en-EN是无效的文化标识符。

令我感到惊讶的是,localeen-EN相同的代码在Windows 10中有效。

我已经检查了一些解决方案。 Windows 8.1不支持一些语言环境吗?可以添加缺少的区域设置吗? 或者,这是一个与操作系统完全无关的问题。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:4)

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

您基本上有两种选择:

  1. 使用有效的标识符。对于英格兰的英语,您应该使用en-GB
  2. 如果您所希望的英格兰文化与en-GB不同,请注册新文化。
  3. 这是您注册新文化的方式:

    文化具有层次结构,其中根始终为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");