android 多語言設置沒法切到印尼語

轉自:http://zhanglu0574.blog.163.com/blog/static/113651073201591623152361/


在做多語言的時候,國家都可以直接用

config.locale = Locale.CHINA;或者config.locale = new Locale("ru");這樣直接調用到,但是印尼的時候使用config.locale = new Locale("id");確獲取不到,文件名也是values-id,改成了"id-ID"後可以,但是後來發現有些手機還是獲取不到。

參考來源:http://www.csdn123.com/html/exception/566/566011_566013_566014.htm

Android國際化(一)語言、國家/區域代碼

當你在開發Android應用時或Android系統時,如果希望自己的產品在全球或多國上市進行銷售時,那麼國際化的工作必不可少。Android系統的國際化需要在應用所在目錄res文件夾下建立針對不同語言或地區的values文件夾,那麼具體應該怎樣進行命名,最終結構又是怎麼樣的呢?

例:

AndroidDemo //應用名稱

     |
     |_____res //Android
應用資源根目錄

        |

        |_____values

               |_____ strings.xml

               |_____ colors.xml

               |_____ dimens.xml

               |_____ styles.xml

        |

        |_____values-zh-rCN //漢語

               |_____ strings.xml

               |_____ colors.xml

               |_____ dimens.xml

               |_____ styles.xml

        |_____values-de //德語

        |

        |.......


查看AndroidAPIvalues可以支持很多屬性,具本參見http://developer.android.com/guide/topics/resources/providing-resources.html


此處我們只針對values後添加語言,國家/區域代碼的情況進行說明

values-zh-rCNvalues固定部分,zh:表示語言代碼,rCN:表示區域代碼,其中r爲固定保留值。

Android中的語言代碼規範遵循的是ISO639-1,區域代碼遵循的是ISO3166-1

以下我們對ISO639-1ISO3166-1標準進行一個簡單說明:

1)ISO639-1

從命名中我們也可直接看出ISO639-1ISO 639國際標準的一部分。ISO639ISO組織爲各語言制定的國際標準。ISO639長期的演變過程中一共出現了6個部分,分別爲:ISO639-1ISO 639-2ISO639-3ISO 639-4ISO639-5ISO 639-6

具體的詳情請參考:

http://zh.wikipedia.org/wiki/ISO_639

http://zh.wikipedia.org/wiki/ISO_639-1%E4%BB%A3%E7%A0%81%E8%A1%A8


2)ISO3166-1

同樣ISO3166-1也是ISO3166國際標準的一部分。ISO3166ISO組織針對國家和地區代碼而制訂的國際標準。ISO3166一共有三部分組成:ISO3166-1ISO 3166-2ISO3166-3

具體的詳情請參考:

http://zh.wikipedia.org/wiki/ISO_3166

http://zh.wikipedia.org/wiki/ISO_3166-1


*注意:

在java.utils.Locale.java類中有如下一段註釋:

 * <p>Note that Java uses several deprecated two-letter codes. The Hebrew ("he") language
 * code is rewritten as "iw", Indonesian ("id") as "in", and Yiddish ("yi") as "ji". This
 * rewriting happens even if you construct your own {@code Locale} object, not just for
 * instances returned by the various lookup methods.

以下幾種語言使用時,Android與ISO 639-1有所有區別,主要是由於歷史問題引起的,要特別注意

 語言中文 語言英文  ISO 639-1   Android

 希伯來語   Hebrew             he              iw

 印尼語      Indonesian        id                in

 依地語      Yiddish               yi                ji

values-he 等價 values-iw

values-id  等價 values-in

value-yi 等價 values-ji

以上三個爲物殊情況,其它語言嚴格遵循ISO 639-1規範



看了這個之後將local的改成in,但是values沒改,但是不知道爲何還是不對,最終將values也改成了values-in才成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章