您的位置:首页 > 移动开发 > Android开发

android 添加新语言之缅甸语

2014-03-21 19:51 267 查看
问题描述:添加一种新的语言。

问题分析:新添加一种语言需要几步,编译ICU资源,添加字库,添加相应的字串资源。

解决方案:

以添加缅甸语为例。下面的方式适用于android4.0以上(包括4.0),android2.3的添加方式有些差异。

总共有四步。

1、编译icu资源( 语言的名称是规定的,如缅甸语的名称是my_MM,可以在维基查找。)

1)在文件external/icu4c/stubdata/icudt46l-default.txt

添加行coll/my.res

添加行 coll/my_MM.res

添加行curr/my.res

添加行lang/my.res

添加行region/my.res

添加行zone/my.res

添加行my.res

添加行my_MM.res

2) mkdir external/icu4c/icuBuild

3) cd external/icu4c/icuBuild

4) ../runConfigureICU Linux

5) make -j2

6) cp data/out/tmp/icudt48l.dat../stubdata/icudt48l-all.dat.

7) cd ../stubdata

8) ./icu_dat_generator.py

9) mm

最终编译的icu文件icudt48l.dat放在system/usr/icu/icudt48l.dat

以上的编译方式在external/icu4c/stubdata/readme.txt有详细说明。

2、添加字库

1) 把字库放到frameworks\base\data\fonts这里面

2) 在该目录的fonts.mk和Android.mk,添加代码,把字库编译进去。

在fonts.mk中添加

PRODUCT_COPY_FILES := \

frameworks/base/data/fonts/Roboto-Regular.ttf:system/fonts/Roboto-Regular.ttf \

frameworks/base/data/fonts/Roboto-Bold.ttf:system/fonts/Roboto-Bold.ttf \

按照这样添加一行

3)在fallback_fonts.xml,添加相应代码。其直接目的是Resources.getSystem().getAssets().getLocales()获取到字库资源。如:

<family>

<fileset>

<filelang="my">Padauk.ttf</file>

</fileset>

</family>

字库资源的载入在这个文件: external\skia\src\ports\SkFontHost_android.cpp的gSystemFonts数组中。在android2.3,是手动添加,在4.0后,动态从system/etc/fallback_fonts.xml读取。

4) 在build/target/product/languages_full.mk中添加孟加拉语my_MM.

3、确保framework res和settings res都有缅甸语资源

4、make clean 后全编

可能遇到的问题:

1、在setting里面没有语言选项。

a) 是否生成ICU文件,进入adb shell, system/usr/icu/icudt48l.dat是否最新生成

b) framework res和settings res都有对于语言的资源

c) languages_full.mk添加对于语言

d) 语言的名称是规定的,如缅甸语的名称是my_MM,可以在维基查找。

2、在settings的语言栏有选项,但是空的。

a) System/etc下面是否新的fallback_fonts.xml

b) System/fonts是否有新的字库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: