Thread.CurrentThread.CurrentUICulture 无法正确返回国家/地区

本文关键字:返回 国家 地区 CurrentThread CurrentUICulture Thread | 更新日期: 2023-09-27 18:37:19

我遇到了一个非常奇怪的问题。我正在我的项目上实现本地化,但是当我尝试获取当前区域设置 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 中使用的显示语言匹配,而不是日期/时间/数字格式(它们可以完全不同)。

Thread.CurrentThread.CurrentUICulture 无法正确返回国家/地区

我认为

你在标题中使用错误。

MS 使用 system.thread 而不是 system.globalizationhttps://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);
}