2012-01-05 43 views
10

根據Java參考,Locale.getLanguage()應該返回該語言的2個字母的小寫ISO代碼(例如「en」),而getDisplayLanguage()是獲取可讀名稱的方法(例如「English 「)。爲什麼Android中的Locale.getDefault()。getLanguage()返回顯示名稱而不是語言代碼?

那麼如何來,在Android的下面的代碼:

Locale.getDefault().getLanguage() 

返回「英語」或「西班牙語」,而不是「恩」和「ES」 ????

我完全摸不着頭腦......

+0

@trante甚至不是遠程的 – matteo 2015-05-06 02:03:12

回答

6

我已經想通了。發生這種情況是因爲之前我調用了Locale.setDefault()並將它傳遞給了一個Locale,而這個Locale又是通過錯誤地將整個語言名稱傳遞給它創建的(我從偏好設置中選擇了該語言,並且錯誤地選擇了該條目的標籤的價值)。

也就是說,我所做的:

String lang= //... here I assigned "English" while I thought 
      // I was assigning it "en" 
Locale locale=new Locale(lang); 
Locale.setDefault(locale);  // (*) 

// and later 
Locale.getLocale().getLanguage(); //returns "english" 

所以,當我查詢了默認的語言環境,它實際上是我創造的語言環境,其語言的代碼,我曾錯誤地設置爲「英語」。

有幾個有趣的事情,雖然:

  1. 線(*)的實際工作,實際上沒有改變本地化爲英語(或西班牙語,當我用「西班牙」),也就是說, setDefault()似乎接受一個「格式不正確」的語言環境,甚至可以理解它。但它不能解決它。
  2. 注意我錯誤地設置區域設置時使用了大寫英文,但最後它返回「英文」全部小寫。
3

我不知道爲什麼會出現這個問題,但是對於語言的另一個標準是ISO3代碼。 您可以撥打Locale.getDefault().getISO3Language()並返回「eng」或「esp」。

13

使用

getResources()。getConfiguration()。locale.getLanguage()

,它會工作,即使我會考慮你的觀察到的行爲的錯誤值得報道就好了..

0

Android正在返回可讀名稱而不是代碼。

Locale.getDefault()包含字符串。所以,如果你打電話給任何打印或日誌,它會工作... 含義Locale.getDefault()。toString()有你的語言環境代碼。

+1

謝謝Android開發人員在框架中的另一個不一致:@ – 2014-11-27 11:45:09

相關問題