0

我有一个非常奇怪的问题。我正在对我的项目实施本地化,但是当我尝试让当前的语言环境 Windows 正在运行时,它错过了国家信息。这是一个示例代码:

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture = CultureInfo.CurrentUICulture;
      Console.WriteLine("The current UI culture is {0} [{1}]",
                        culture.NativeName, culture.Name);
   }
}

当我以最常用的语言(En-US、FR-fr)运行它时,它会正确返回。但是,例如,当我从比利时选择法语时,它会检索我 FR-fr 而不是 FR-be - 即使我从语言首选项选项中删除了法国的法语。

我想知道无论我的软件位于哪个国家/地区,我如何才能始终正确选择国家/地区。

ps:使用 CurrentCulture 不是我正在寻找的答案,因为我想要匹配我在 UI 中使用的显示语言,而不是日期/时间/数字格式(它们可能完全不同)。

4

1 回答 1

1

我认为你在标题中使用错误。

MS 使用 system.thread 而不是 system.globalization https://msdn.microsoft.com/it-it/library/system.globalization.cultureinfo.currentuiculture(v=vs.110).aspx 其中一些存在编译错误.

正确的编译代码是这样的:

(注意 CultureInfo.CurrentCulture 是只读的,而不是我使用了具有 setter 可访问性的 System.Threading.Thread.CurrentThread.CurrentCulture)

public static void Main(string[] args)
{
    // Display the name of the current thread culture.
    Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name);

    // Change the current culture to th-TH.
    System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("th-TH", false);
    Console.WriteLine("CurrentCulture is now {0}.", CultureInfo.CurrentCulture.Name);

    // Display the name of the current UI culture.
    Console.WriteLine("CurrentUICulture is {0}.", CultureInfo.CurrentUICulture.Name);

    // Change the current UI culture to ja-JP.
    System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("ja-JP", false);
    Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name);

}
于 2016-03-03T21:57:25.727 回答