android locales本地化(整理)
生活随笔
收集整理的這篇文章主要介紹了
android locales本地化(整理)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 語言定制
1.1 ICU4C
1.1.1 ICU4C簡介
ICU4C(ICU for C,http://site.icu-project.org/)是ICU在C/C++平臺下的版本, ICU(International Component for Unicode)是基于"IBM公共許可證"的,與開源組織合作研究的, 用于支持軟件國際化的開源項目。ICU4C提供了C/C++平臺強大的國際化開發(fā)能力,軟件開發(fā)者幾乎可以使用ICU4C解決任何國際化的問題,根據(jù)各地的風(fēng)俗和語言習(xí)慣,實現(xiàn)對數(shù)字、貨幣、時間、日期、和消息的格式化、解析,對字符串進行大小寫轉(zhuǎn)換、整理、搜索和排序等功能,必須一提的是,ICU4C提供了強大的BIDI算法,對阿拉伯語等BIDI語言提供了完善的支持。
ICU首先是由Taligent公司開發(fā)的,Taligent公司現(xiàn)在被合并為IBM?公司全球化認證中心的Unicode研究組,然后ICU由IBM和開源組織合作繼續(xù)開發(fā),開源組織給與了ICU極大的幫助。
開始ICU只有Java平臺的版本,后來這個平臺下的ICU類被吸納入SUN公司開發(fā)的JDK1.1,并在JDK以后的版本中不斷改進。C++和C平臺下的ICU是由JAVA平臺下的ICU移植過來的,移植過的版本被稱為ICU4C,來支持這C/C++兩個平臺下的國際化應(yīng)用。
ICU4C和ICU4C區(qū)別不大,但由于ICU4C是開源的,并且緊密跟進Unicode標準,ICU4C支持的Unicode標準總是最新的;同時,因為JAVA平臺的ICU4J的發(fā)布需要和JDK綁定,ICU4C支持Unicode標準改變的速度要比ICU4J快的多。
ICU用戶指南:http://userguide.icu-project.org/locale
1.1.2 ANDROID語言包
Android 使用的語言包就是ICU4C,位置:external/icu4c。
Android2.1及2.2支持的26種語言(locales)
Android2.3以上版本支持的57種語言(locales).
1.2 定制語言
在PRODUCT_LOCALES字段里添加需要語言,如:
PRODUCT_LOCALES := en_US zh_CN
則系統(tǒng)里只有英語和漢語兩種語言。
然后語言的選擇處理是在external/icu4c/stubdata/Android.mk里進行的,如下:
config := $(word 1, \
$(if $(findstring ar,$(PRODUCT_LOCALES)),large) \
$(if $(findstring da,$(PRODUCT_LOCALES)),large) \
$(if $(findstring el,$(PRODUCT_LOCALES)),large) \
..... \
us)
在android2.2中最終生成/system/lib/libicudata.so
在android2.3以上版本中最終生成使用的是/system/usr/ict/icudt44l.dat.
1.3 默認語言
在PRODUCT_LOCALES字段里,將要選擇的語言放在第一位,如:PRODUCT_LOCALES := en_US zh_CN
1.4 增加語言支持
1.4.1 增加系統(tǒng)版本支持的語言范圍內(nèi)的語言,在setting中增加語言選擇
/build/target/product目錄下,language_full.mk|language_small.mk 看你的編譯選項使用那個文件了,修改PRODUCT_LOCALES ,如下PRODUCT_LOCALES包括了57中語言的支持:
PRODUCT_LOCALES :=ar_EG ar_IL bg_BG ca_ES cs_CZ da_DK de_AT de_CH de_DE de_LI el_GR en_AU en_CA en_GB en_IE en_IN en_NZ en_SG en_US en_ZA es_ES es_US fi_FI fr_BE fr_CA fr_CH fr_FR he_IL hi_IN hr_HR hu_HU id_ID it_CH it_IT ja_JP ko_KR lt_LT lv_LV nb_NO nl_BE nl_NL pl_PL pt_BR pt_PT ro_RO ru_RU sk_SK sl_SI sr_RS sv_SE th_TH tl_PH tr_TR uk_UA vi_VN zh_CN zh_TW
1.4.2 增加android系統(tǒng)不支持的語言,如在android2.2中增加對越南語,泰語(這兩中語言android2.3中才支持)的支持。
例:android2.2系統(tǒng)添加希伯來文
我大概是這樣修改的:
1.frameworks\base\data\fonts目錄下的字體庫,替換為希伯來的
2.將mk文件中的 PRODUCT_LOCALES 添加he_IL希伯來的支持
3.external\icu4c\stubdata\Android.mk 添加希伯來的國籍問題 $(if $(findstring he,$(PRODUCT_LOCALES)),large) \
4.在應(yīng)用程序中,在res下建立目錄 values-iw-rIL,并翻譯成希伯來文。。
5.make clean,之后整個make
1.5 修改或增加ICU資源或定義,比如對locales地區(qū)數(shù)字、貨幣、百分比等書寫習(xí)慣進行修改。輕易不要修改,除非ICU資源本身有bug.
/external/icu4c/data/locales/
NumberElements{
",",
"",
";",
"%",
"0",
"#",
"-",
"E",
"‰",
"∞",
"NaN",
"+",
}
NumberPatterns{
"#,##0.###",
"¤#,##0.00",
"#,##0%",
"#E0",
}
編譯:
/external/icu4c/runConfigureICU Linux
make -j2
這個目錄下的文件定義了各國或地區(qū)的語言使用習(xí)慣,編譯后在android2.3中生成icudtxxl-all.dat,icudtxxl-large.dat數(shù)據(jù)文件(android2.2稍有不同) 數(shù)據(jù)文件android編譯過程中將復(fù)制到out/target/product/xxxxx/system/usr/icu/icudtxxl.dat,在android中經(jīng)JDK讀取解釋,如/java/text/NumberFormat.java 這樣同一個數(shù)字在不同的語言locales設(shè)置情況下,將按地區(qū)習(xí)慣顯示。
參考:
http://blog.csdn.net/zhq56030207/article/details/6239979 如何添加一種語言?
http://www.eoeandroid.com/thread-46129-1-1.html
http://www.eoeandroid.com/thread-46129-1-1.html
http://developer.android.com/reference/java/util/Locale.html
http://topic.csdn.net/u/20110308/11/7b29dfdf-f106-45ac-baa1-c4bcf19252f5.html?32827
http://hi.baidu.com/xie_jack/blog/item/ac3f390aef09339a0a7b823b.html
http://blog.csdn.net/seker_xinjian/article/details/6289191
http://www.douban.com/group/topic/13422793/
總結(jié)
以上是生活随笔為你收集整理的android locales本地化(整理)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 济南信息安全服务资质认证申请流程
- 下一篇: ${cxt}