2016-10-03 86 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)。 –

相關問題