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 中使用的显示语言匹配,而不是日期/时间/数字格式(它们可以完全不同)。
我认为
你在标题中使用错误。
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);
}