C# 如何在WinRT应用程序中获取实际语言?

C# 如何在WinRT应用程序中获取实际语言?,c#,windows-8,windows-runtime,C#,Windows 8,Windows Runtime,有可能在Windows Phone上获得操作系统的实际语言吗?我使用的是CultureInfo.CurrentCulture.TwoLetterIsoString,但我总是收到en而不是正确的语言,在我的例子中是de 那么如何在WinRT应用程序中获得实际语言呢?据我记忆所及: Windows.Globalization.ApplicationPreferences.PreferredLanguage 你可以用 Windows.Globalization.Language.CurrentInp

有可能在Windows Phone上获得操作系统的实际语言吗?我使用的是
CultureInfo.CurrentCulture.TwoLetterIsoString
,但我总是收到en而不是正确的语言,在我的例子中是
de

那么如何在WinRT应用程序中获得实际语言呢?

据我记忆所及:

Windows.Globalization.ApplicationPreferences.PreferredLanguage
你可以用

Windows.Globalization.Language.CurrentInputMethodLanguageTag

以获得实际的语言。如果您使用的是德国版本的Windows 8,则返回de de。如果您创建的是HTML5/javascript Windows应用程序,则返回de。您可以使用以下选项:

var language = window.navigator.userLanguage || window.navigator.language;
alert(language);
事实上有很多“有点错误”的答案

  • Thomas指出,Windows.Globalization.Language.CurrentInputMethodLanguageTag在所有场景中都不起作用。它只返回显示用户键盘的语言
  • 您也可以使用
    Windows.Globalization.ApplicationLanguages.Languages
    ,但它是用户语言首选项和应用程序支持的语言的组合

对于大多数准确的用户首选项语言,您需要使用
Windows.System.UserProfile.GlobalizationPreferences.Languages[0]

根据MSDN,正确答案是:

Windows.System.UserProfile.GlobalizationPreferences.Languages[0]

这应该是用户最喜欢的语言。

Windows社区工具包现在为此提供了一个简单的API:

用法:

using Microsoft.Toolkit.Uwp.Helpers;


var cultureInfo = SystemInformation.Instance.Culture;

示例代码:

我现在将使用“Windows.System.UserProfile.GlobalizationPreferences.Languages[0]”。实际上,这将返回当前键盘语言,而不是用户区域设置选择!WinRT与CurrentCulture没有直接的等价物,但是
Windows。全球化
命名空间确实提供了它的替代方案!我的键盘布局不反映我的首选语言。当您属于当地少数民族时(实际上世界上大多数人都是这样做的),当您喜欢英语作为系统语言,因为您在国际上进行交流时,这是很常见的。这在UWP上不存在:(
using Microsoft.Toolkit.Uwp.Helpers;


var cultureInfo = SystemInformation.Instance.Culture;