2017-04-12 88 views
0

我需要更改語言,但保留貨幣和日期/時間格式。這個怎麼做?UWP更改語言而不更改貨幣

我試過以下(貨幣和日期/時間格式必須爲EN-US):

ApplicationLanguages.PrimaryLanguageOverride = "zh"; 
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Reset(); 
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset(); 

var fixedCulture = new CultureInfo("en-US"); 
CultureInfo.CurrentCulture = fixedCulture; 
CultureInfo.CurrentUICulture = fixedCulture; 
CultureInfo.DefaultThreadCurrentCulture = fixedCulture; 
CultureInfo.DefaultThreadCurrentUICulture = fixedCulture; 

語言不得到改變,以中國(即資源字符串是指「ZH 「文件夾)以及貨幣符號和日期/時間格式。

我的問題是,如何更改語言而不更改貨幣和日期/時間格式?

謝謝!

回答

0

默認情況下,貨幣和日期/時間根據當前應用程序語言的約定進行格式化。因此,如果您更改PrimaryLanguageOverride設置,貨幣格式和日期/時間也將更改。

要覆蓋默認設置,我們可以使用DateTimeFormatterCurrencyFormatter

例如,對於日期/時間格式,我們可以使用下面的格式,如:

var dateTimeFormatter = new DateTimeFormatter("shortdate longtime", new[] { "en-US" }); 
var dateTimeString = dateTimeFormatter.Format(DateTime.Now); 

而對於貨幣格式,我們可以用這樣一個格式:

var currencyFormatter = new CurrencyFormatter(CurrencyIdentifiers.USD, new[] { "en-US" }, "US"); 
var currencyString = currencyFormatter.Format(123.456); 

欲瞭解更多信息請特別參見Date and time formatting sample方案4和Number formatting and parsing sample特別是方案3.

問題em是我需要服從實際的系統語言設置。

要檢索系統語言設置,我們可以使用我們可以使用的Globalization​Preferences.Languag‌​es屬性。該屬性按照首選項的順序獲取用戶首選的語言集合。該列表中的第一種語言是系統語言。

//Obtain the user's system language setting. 
var sysLanguage = Windows.System.UserProfile.Globalization​Preferences.Languages[0]; 

Globalization​Preferences Class也有Currencies屬性,它可以被用來CurrencyFormatter類似如下:

var currencyFormatter = new CurrencyFormatter(Windows.System.UserProfile.Globalization​Preferences.Currencies[0]); 
var currencyString = currencyFormatter.Format(123.456); 

我把 「印尼」(語言代碼:ID)和它doesn 't work :(

我不熟悉印尼語。我嘗試在語言中添加「Bahasa Indonesian」,並將其設置爲默認值。
enter image description here
但是,這並沒有改變Windows顯示語言。系統仍然以英文顯示。默認情況下,貨幣是根據Windows顯示語言設置的。請參閱設置>時間&語言>區域&語言>附加日期,時間,&區域設置>區域:更改日期,時間或數字格式
enter image description here

所以這可能是我的解決方案不適用於印尼的原因。對於其他一些語言,例如中文,日文和法文,如果我們將它們設置爲默認語言,Windows顯示語言也會發生變化。因此它們可以工作。
enter image description here

無論如何,在我的解決方案中,它總是獲取用戶的系統設置。通常,我們應該尊重用戶的設置(假設用戶使用印度尼西亞語並且不想使用英文格式,他/她將更改爲印度尼西亞格式)。如果你想使用根據默認語言的貨幣格式,你仍然可以利用的CultureInfo樣的優勢:

12345.6789.ToString("C3", new CultureInfo(Windows.System.UserProfile.Globalization​Preferences.Languages[0])) 
+0

你好周杰倫,我一直在使用這個考慮,但我不能。問題是我需要服從實際的系統語言設置。我只需要翻譯文本。例如,如果系統語言設置爲en-US,那麼我需要遵守格式(即使用戶選擇中文語言)。如果系統語言是en-AU,我需要遵守格式(例如dd/MM/yyyy而不是MM/dd/yyyy)。 – Sam

+0

@Sam對不起,遲到的迴應。根據你的評論,你需要的是獲得系統語言。然後你可以嘗試'Windows.System.UserProfile.Globalization Preferences.Languages'。我已經更新了我的答案,請檢查一下。 –

+0

嗨,周杰倫,我只是把你的解決方案。它與中國,但不適用於所有其他語言?例如,我把「印度尼西亞」(語言代碼:id),它不起作用:( – Sam