2016-10-03 87 views
0

我需要解决以下问题。这似乎很简单,但我卡住了。以特定语言获取国家/地区名称,而不是系统范围内的所选语言

我正在写一个转换器,它将一个国家的地理区域代码作为输入,并且应该以应用程序的显示语言返回国家的名称。

(目标功能)

应用语言: “FR”

输入: “US”

输出: “États紫光”

为此我使用以下代码。

public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     string countryCode = (string)value;      
     var country = new Windows.Globalization.GeographicRegion(countryCode); 
     return country.DisplayName; 

    } 

问题在于它以系统范围选定的语言返回国家。例如。

实施例2

系统语言: “EN-US”

应用程序语言(经由PrimaryLanguageOverride设置): “FR”

输入: “US”

输出:美国

我怀疑发生了什么是Windows.Globalization.GeographicRegion类获得其培养来自系统范围设置的数据,而不是来自应用程序文化设置。

有没有人知道这个解决方法?

有没有一种方法可以为转换器运行的线程设置不同的文化?

+1

可能是一个错误,似乎并没有采取系统设置,因为我将系统默认语言更改为法语和荷兰语进行测试。 – Bart

+0

@Bart感谢您花时间检查此内容。你能告诉我你试过了什么,并得到了什么结果? – Corcus

回答

0

GeographicRegion.DisplayName可以得到一个本地化的字符串,适合显示给用户识别区域。但是,此功能需要安装相应的语言包。

例如,为了显示法国的地区,我们需要先打开设置→时间&语言→地区&语言→添加语言安装法语语言包
enter image description here

请注意,我们不需要将French设置为默认语言,因此系统语言仍然是英语。

安装法语语言包后,您的代码应该能够返回法语中的本地化区域名称。例如,当您输入“美国”时,输出应该是“美国国家统计局”。

+0

Jay Zuo感谢您回答我的问题。事实上,在我安装了语言包后,它就可以工作但是,我正在创建一个应用程序,为用户提供选择可能未安装在系统中的显示语言的选项。 有没有一种方法可以在不知道语言包安装的情况下使用Windows.Globalization API根据地理区域代码获取国家/地区的本地化名称? – Corcus

+0

@Corcus在使用Windows.Globalization API时,如果不安装相应的语言包,就无法获得本地化的名称。语言包就像我们用来支持本地化的.resw资源文件。没有它,API无法检索相应的本地化名称。 –

+0

@Corcus我不确定你想要支持多少区域代码。如果不是很多,你可以把它们放到资源文件中,并像代码中一样检索[将UI字符串放入资源](https://msdn.microsoft.com/en-us/windows/uwp/globalizing/put-ui-strings-到资源)。否则,您可以在[Microsoft Translator API](https://www.microsoft.com)中使用[GetLanguageNames方法](https://msdn.microsoft.com/en-us/library/ff512414.aspx)等在线服务/en-us/translator/getstarted.aspx)。 –

相关问题