默認情況下,貨幣和日期/時間根據當前應用程序語言的約定進行格式化。因此,如果您更改PrimaryLanguageOverride設置,貨幣格式和日期/時間也將更改。
要覆蓋默認設置,我們可以使用DateTimeFormatter和CurrencyFormatter。
例如,對於日期/時間格式,我們可以使用下面的格式,如:
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是我需要服從實際的系統語言設置。
要檢索系統語言設置,我們可以使用我們可以使用的GlobalizationPreferences.Languages屬性。該屬性按照首選項的順序獲取用戶首選的語言集合。該列表中的第一種語言是系統語言。
//Obtain the user's system language setting.
var sysLanguage = Windows.System.UserProfile.GlobalizationPreferences.Languages[0];
GlobalizationPreferences Class也有Currencies屬性,它可以被用來CurrencyFormatter類似如下:
var currencyFormatter = new CurrencyFormatter(Windows.System.UserProfile.GlobalizationPreferences.Currencies[0]);
var currencyString = currencyFormatter.Format(123.456);
我把 「印尼」(語言代碼:ID)和它doesn 't work :(
我不熟悉印尼語。我嘗試在語言中添加「Bahasa Indonesian」,並將其設置爲默認值。
但是,這並沒有改變Windows顯示語言。系統仍然以英文顯示。默認情況下,貨幣是根據Windows顯示語言設置的。請參閱設置>時間&語言>區域&語言>附加日期,時間,&區域設置>區域:更改日期,時間或數字格式。
所以這可能是我的解決方案不適用於印尼的原因。對於其他一些語言,例如中文,日文和法文,如果我們將它們設置爲默認語言,Windows顯示語言也會發生變化。因此它們可以工作。
無論如何,在我的解決方案中,它總是獲取用戶的系統設置。通常,我們應該尊重用戶的設置(假設用戶使用印度尼西亞語並且不想使用英文格式,他/她將更改爲印度尼西亞格式)。如果你想使用根據默認語言的貨幣格式,你仍然可以利用的CultureInfo
樣的優勢:
12345.6789.ToString("C3", new CultureInfo(Windows.System.UserProfile.GlobalizationPreferences.Languages[0]))
你好周杰倫,我一直在使用這個考慮,但我不能。問題是我需要服從實際的系統語言設置。我只需要翻譯文本。例如,如果系統語言設置爲en-US,那麼我需要遵守格式(即使用戶選擇中文語言)。如果系統語言是en-AU,我需要遵守格式(例如dd/MM/yyyy而不是MM/dd/yyyy)。 – Sam
@Sam對不起,遲到的迴應。根據你的評論,你需要的是獲得系統語言。然後你可以嘗試'Windows.System.UserProfile.Globalization Preferences.Languages'。我已經更新了我的答案,請檢查一下。 –
嗨,周杰倫,我只是把你的解決方案。它與中國,但不適用於所有其他語言?例如,我把「印度尼西亞」(語言代碼:id),它不起作用:( – Sam