2016-03-03 63 views
0

我有一个很奇怪的问题。我正在对我的项目实施本地化,但是当我尝试获取当前的语言环境Windows正在运行时,它会忽略国家/地区信息。这是一个示例代码:Thread.CurrentThread.CurrentUICulture不能正确返回国家

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中使用的显示语言匹配,而不是日期/时间/数字格式(它们可以完全不同)。

+0

我刚刚尝试卸载法文语言包(FR-fr),然后从法文比利时安装。我仍然得到FR-fr。这是Windows的问题吗? –

+0

水晶球表示您选择了另一个键盘布局,而不是更改操作系统语言。您必须使用“高级”按钮。非常不清楚你实际做了什么,可能最好先在superuser.com上ping这个。一定要提及Windows版本和版本,他们在每个版本中都对此进行了更改,并且您安装的语言包有很多。 –

+0

我在Windows 8和10中测试过。它们都不起作用。我改变了OS语言安装的语言包和类似的东西(你只能在高级会话中这样做),就像我在前面的评论中提到的一样。对于CultureInfo类,需要System.Globalization为 –

回答

0

我觉得比你有错在标题中使用。

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

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

(请注意,当CultureInfo.CurrentCulture是只读的,而不是我用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); 

} 
+0

。并且您发布的链接上的所有示例都使用System.Globalization。 –

+0

对不起,我在手机上阅读过,从未尝试过。我发现了一些例子的错误。我已经添加了正确的信息 –

+0

对不起,我不想以编程方式更改当前的文化,也不想改变当前的UI文化。我只想从操作系统中获得正确的语言/国家信息 - 如果是比利时法语,则不正确。您发布的代码不会从我发布的代码中添加任何新内容,但不会更改文化请求。 –