Android系统多语言支持总结文档

1.添加设置语言选项
通常为精简系统大小,Android系统可用的语言选项只包括简体中文,繁体中文和英语三种语言。根据具体需求可能需要添加其他语言的支持,首先先根据build/buildspec.mk文件中的TARGET_PRODUCT来找到build/target/product目录下对应mk文件,如warrior.mk。在warrior.mk文件中可以发现如下语句:
# Get a list of small languages. 
$(call inherit-product, $(SRC_TARGET_DIR)/product/languages_warrior.mk) 
$(call inherit-product-if-exists, frameworks/base/data/fonts/fonts.mk) 
$(call inherit-product-if-exists, frameworks/base/data/keyboards/keyboards.mk)
打开languages_warrior.mk发现只有一条语句:
PRODUCT_LOCALES := zh_CN zh_TW en_US en_GB fr_FR it_IT de_DE es_ES cs_CZ ru_RU ko_KR ar_EG ja_JP
上面这些就是编译系统后设置语言列表中显示的可支持选择的语言选项,在languages_full.mk文件中我们发现其实可以支持更多的语言:
PRODUCT_LOCALES := en_US fr_FR it_IT es_ES de_DE nl_NL cs_CZ pl_PL ja_JP zh_TW zh_CN ru_RU ko_KR nb_NO es_US da_DK el_GR tr_TR pt_PT pt_BR rm_CH sv_SE bg_BG ca_ES en_GB fi_FI hi_IN hr_HR hu_HU in_ID iw_IL lt_LT lv_LV r    o_RO sk_SK sl_SI sr_RS uk_UA vi_VN tl_PH ar_EG fa_IR th_TH sw_TZ ms_MY af_ZA zu_ZA am_ET hi_IN 
在指定的language.mk文件里添加国家语言iso编码后,就可以在语言设置表里显示了。


2.关于 ICU4C
ICU4C(ICU for C)是ICU在C/C++平台下的版本, ICU(International Component for Unicode)是基于"IBM公共许可证"的,与开源组织合作研究的, 用于支持软件国际化的开源项目。ICU4C提供了C/C++平台强大的国际化开发能力,软件开发者几乎可以使用ICU4C解决任何国际化的问题,根据各地的风俗和语言习惯,实现对数字、货币、时间、日期、和消息的格式化、解析,对字符串进行大小写转换、整理、搜索和排序等功能,必须一提的是,ICU4C提供了强大的BIDI算法,对阿拉伯语等BIDI语言提供了完善的支持。
ICU4C相关代码位于external/ icu4c目录下,android\external\icu4c\data下存放的是icu最原始的资源,其下brkitr、coll、locales三个文件夹下的txt文件即为各国家语言翻译字符串原始资源,存放各语言对于当地特殊文化相关的数据诸如地区时间货币的格式等。android\external\icu4c\stubdata目录用来building Android ICU的数据文件。


3.Android语言资源库的添加
android\external\icu4c下运行./configure,生成相应的Makefile文件。这里如果运行时提示无权限,则修改该文件的用户权限为可执行。 android\external\icu4c下运行make,会在android\external\icu4c\data\out下生成相应的res资源。此时将android\external\icu4c\data下相关txt文件编译为同名res。 
make运行结束后,手动复制android\external\icu4c\data\out\tmp下的icudt42l.dat到android\external\icu4c\stubdata文件夹下,并将其修改为脚本所需要的文件名icudt42l-all.dat。修改stubdata文件夹下的配置文件icudt42l-large.txt,添加您要增加的语言,如里面内容示例:语言_地区.res。注意:所加的语言在一定要在data下存在相应的语言_地区.txt。在增加某语言_地区.res时,若存在对应的上一级的资源语言.txt要把相应的语言.res也加入。 
在stubdata文件夹下运行:python icu_dat_generator.py 4.2,此脚本会根据icudt42l-large.txt从icudt42l-all.dat抽取相应资源重新生成新的icudt42l-large.dat 。完成后在此文件夹下运行mm,即可生成libicudata.so文件,此so为最终系统中引用的直接资源。 

你可能感兴趣的:(Android系统多语言支持总结文档)