2014-09-22 48 views
1

在iPhone上,用戶可以選擇他的顯示語言和用於格式化的區域。
顯示語言等同於.NET的Thread.CurrentUICulture,即UI的語言。
格式化區域相當於被.NET的Thread.CurrentCulture,即要使用的區域性設置格式化數字,日期等如何獲取CurrentCulture的正確值?

假設如下設置:
語言:英語
地區:德國

在iOS6,NSLocale.CurrentLocale將返回"de_DE",我可以很容易地轉換成CultureInfo對象。
但是,從那時起,事情就發生了變化。
例如,在iOS8上,我得到"en_DE",這是CultureInfo的無效值。

那麼,確保我的Xamarin.iOS應用程序考慮用戶所選設置的首選方法是什麼,即如何獲得Thread.CurrentCulture的正確值?

回答

2

我想我只是回答了我的問題:

改變地區德國實際上並沒有改變格式,只要用戶沒有明確關閉「自動」,在地區高級設置和更改該語言也轉換成德語。只有在這種情況下,格式與UI語言實際上是不同的。

基於這一點,我現在用這個代碼:

private static CultureInfo GetFormattingLanguage() 
{ 
    try 
    { 
     return CultureInfo.GetCultureInfo(
      NSLocale.CurrentLocale.LocaleIdentifier.Replace('_', '-')); 
    } 
    catch (CultureNotFoundException) 
    { 
     return CultureInfo.GetCultureInfo(NSLocale.CurrentLocale.LanguageCode); 
    } 
}