2014-09-05 30 views
3

我想列出可用的Locales,如下所示。區域語言區域設置可用但未顯示在日誌中

private List<String> getInstalledLanguages() { 
    Locale[] listLocales = Locale.getAvailableLocales(); 
    List<String> listInstalledLanguages = new ArrayList<String>(); 
    for(int i=0; i<listLocales.length; i++) { 
     String language = listLocales[i].getDisplayLanguage(); 
     Log.i(TAG, "Language : "+language); 
     if (language.equals("English") && !listInstalledLanguages.contains("English")) 
      listInstalledLanguages.add(language); 

     if (language.equals("Hindi") && !listInstalledLanguages.contains("Hindi")) 
      listInstalledLanguages.add(language); 

     if (language.equals("Kannada") && !listInstalledLanguages.contains("Kannada")) 
      listInstalledLanguages.add(language); 
    } 

    return listInstalledLanguages; 
} 

Samsung Tab3,我可以看到HindiKannada語言在語言設置中列出的,但是當我運行上面的代碼,我沒有看到他們在與其他語言(在日誌)列表。

HindiKannada語言在各自語言的語言設置中列出。我的意思是,北印度語列爲हिन्दी,卡納達語列爲ಕನ್ನಡ

即使我試圖讓它們各自的區域名稱(हिन्दी和ಕನ್ನಡ,因爲它是)如下,但不能成功。

if (language.equals("हिन्दी")) 
     listInstalledLanguages.add(language); 

任何人都可以請我幫忙嗎?

TIA。

+0

當您打印SOP(語言),您能得到什麼?你有空間嗎? – 2014-09-08 12:29:27

+0

nope我什麼也沒得到。除了那兩種語言之外,我得到了其他所有人。 – Braj 2014-09-08 12:32:02

+0

你的log.I打印這些值嗎? – 2014-09-08 13:16:06

回答

1

基於註釋和其他答案,我明白,你看不到語言「印地文」和「卡納達語」在你的日誌,並沒有在列表中,但你可以在手機設置中查看它們。 我thinkthat你應該嘗試昌河你getAvaiableLocales因爲Android's Documentation狀態:

大多數語言環境敏感類提供自己的getAvailableLocales 方法,應優先於該通用方法。

你也應該改變你的listLocales[i].getDisplayLanguage();listLocales[i].getDisplayLanguage(Locale.US);,以確保用英語獲取語言名稱

+0

'Locale.US'解決了這個問題。現在我能夠獲得所需的語言。對不起@Matteo,你錯過了賞金,因爲我遲到回覆:( – Braj 2014-09-18 05:35:17

0

根據意見,我明白了/假設如下:

  1. 代碼Log.i(TAG, "Language : "+language);版畫印地文作爲हिन्दी和埃納德語作爲ಕನ್ನಡ。
  2. listInstalledLanguages不包含這兩種語言。
  3. 上述問題僅在三星Tab3中出現,它將語言列爲UNICODE而不是其他型號。

這可能是由於以下原因:String Comparison with unicode

你可能需要比較使用collator被記錄如下字符串:

java.text.Collat​​or中類提供語言比較。它不是 與String的compareTo一樣快,但它應該是 語言比較的正確值。如果在這種情況下的正確性對你來說很重要,你必須使用這個類。

因此,除了常規字符串比較以外,嘗試使用區域設置爲HINDI和KANNADA的比較字符串,以便它可以在所有模型中使用。

代碼

if (language.equals("Hindi") || collator.compare(language, "हिन्दी")) 
{ 
    listInstalledLanguages.add(language); 
} 
+0

謝謝你的回覆。日誌不能打印這2種語言。除了印地語和卡納達語,我可以看到所有其他語言。無論如何,我會嘗試你的答案一次。 – Braj 2014-09-09 06:49:01

+0

@Braj:我問日誌是否打印,你說是嗎?所以我發佈了這個答案。無論如何,讓這個在這裏,因爲它可以幫助一個人想要做Unicode比較 – 2014-09-09 06:50:05

+0

對不起。我很困惑:D – Braj 2014-09-09 06:51:58