当前文化在 WinRT 中是错误的

Posted

技术标签:

【中文标题】当前文化在 WinRT 中是错误的【英文标题】:Current Culture is wrong in WinRT 【发布时间】:2013-02-26 10:45:46 【问题描述】:

我正在尝试使用 WinRT 中的当前文化来格式化日期时间值。但 CurrentCulture 属性似乎不尊重系统文化。

我尝试了以下两个属性,

System.Globalization.CultureInfo.CurrentCulture.DisplayName
System.Globalization.CultureInfo.CurrentUICulture.DisplayName

即使我在控制面板中更改了区域,两者都提供英语(美国)。但这对 WPF 非常有效。我做错了什么?

【问题讨论】:

你能提供你真正想做的示例代码吗? 另见***.com/q/13743704/24874 【参考方案1】:

WinRT 使用在 Windows.Globalisation 命名空间中公开的 API。看看 ApplicationLanguages 类

http://msdn.microsoft.com/en-us/library/windows/apps/hh972395.aspx

这个类公开了 Languages、ManifestLanguages 和 PrimaryLanguageOveride 属性

【讨论】:

我试过你的答案。但它仍然给我的“en-US”。我通过控制面板区域设置将我的区域设置为格鲁吉亚(格鲁吉亚)。我尝试了以下代码,Windows.Globalization.Language.CurrentInputMethodLanguageTag new Windows.Globalization.NumberFormatting.DecimalFormatter() .GeographicRegion 输入语言是什么?就是这么用的【参考方案2】:

要获得我们可以使用的 InvariantCulture 设置,

“ApplicationLanguages.PrimaryLanguageOverride = CultureInfo.InvariantCulture.TwoLetterISOLanguageName;”

这对我有用。

【讨论】:

请不要那样做。这真是个坏主意。 PrimaryLanguageOverride 旨在支持用户为应用程序选择特定语言,该应用程序可能与其用户语言列表指定的语言的一般偏好不匹配。此设置在应用程序的运行中保持不变。【参考方案3】:

现代应用程序使用用户语言列表来确定默认应用程序语言应该是什么,并且应用程序语言用于初始化 CurrentCulture 和 CurrentUICulture。桌面应用 (wpf) 将这些初始化为用户的默认 UI 语言和区域设置。

发生了两种情况之一:您的应用程序是使用一组有限的语言资源构建的,默认使用 en-US,并且您没有在用户语言列表中包含任何这些语言,或者 en-US 是您的应用程序中有资源的用户语言列表中的第一种语言。

【讨论】:

以上是关于当前文化在 WinRT 中是错误的的主要内容,如果未能解决你的问题,请参考以下文章

更改 Powershell 会话的当前文化,特定于 v3.0+

将线程文化设置为中性文化

c#:在 dotnet 类中是不是有一个属性可以说明“当前”文化是不是是实际的默认文化?

如何返回用户在 PC 中使用的当前文化

在 web.config 中设置的当前文化

序列化\反序列化 - 我应该使用不变的文化信息还是保留当前的文化信息