为Android添加多国语言包.pdf
虽然 Android 从2.3 开始已经支持50 种以上的语言,但是不是每种语言都有字体可以显示。遇到一个新需求 ,
有客户要求对hindi 语言的支持。于是上网找了一些资料,发现网上介绍的大部分是如何替换默认字体,就
是替换./frameworks/base/data/fonts /DroidSansFallback.ttf ,但是替换完之后,中文就无法正常显示。其实
只要有下面几个步骤,就可以实现新曾加一种语言的显示支持:
1. 需要有可以显示hindi 语言的字体,我在网上下载了一个:DroidHindi.ttf
2. 需要修改的地方主要有
1 )将下载的字体文件拷贝到: ./frameworks/base/data/fonts/
2 )修改 ./frameworks/base/data/fonts/Android.mk ,将DroidHindi.ttf 添加到 copy_from :
copy_from := \
DroidSans.ttf \
DroidSans-Bold.ttf \
DroidSansArabic.ttf \
DroidSansHebrew.ttf \
DroidSansThai.ttf \
DroidHindi.ttf \
DroidSerif-Regular.ttf \
DroidSerif-Bold.ttf \
DroidSerif-Italic.ttf \
DroidSerif-BoldItalic.ttf \
DroidSansMono.ttf \
Clockopia.ttf
复制代码
3 ) Hindi 的语言代码是hi_IN ,修改./device/qcom/common/common.mk ,将hindi 的语言代码加进去,
这样在你的设置->语言和键盘->选择语言里面就可以看见hindi 语言了:
PRODUCT_LOCALES := en_US en_GB es_ES es_US fr_FR zh_CN zh_TW hi_IN it_IT pt_PT ru_RU
4 )修改 ./external/skia/src/ports/SkFontHost_android.cpp ,将DroidHindi.ttf 加进去。网上介绍的很多
方法都没有提到这一步,如果没有这一步的话,添加的语言是不生效的,显示的是乱码,因为android 无法
找到hindi 语言可以显示的字体,还是会选择默认字体去显示。修改的地方为:
/* Fonts must be grouped by family, with the first font in a family having the
list of names (even if that list is empty), and the following members having
null for the list. The names list must be NULL-terminated
*/
static const FontInitRec gSystemFonts[] = {
{ "DroidSans.ttf", gSansNames },
{ "DroidSans-Bold.ttf", NULL },
{ "DroidSerif-Regular.ttf", gSerifNames },
{ "DroidSerif-Bold.ttf", NULL },
{ "DroidSerif-Italic.ttf", NULL },
{ "DroidSerif-BoldItalic.ttf", NULL },
{ "DroidSansMono.ttf", gMonoNames },
/* These are optional, and can be ignored if