Android产品定制多语言
android产品支持的多语言非常丰富,在很多市场上销售的android产品的语言列表很长很长。在国内,一般都默认中文,还有许多其他语言,有事列表太长了,一旦客户在前面点错了,要再选回来,要翻啊翻的,下翻很久才到。中文一般都在最下面,这样很不方面。虽然有很多方法去绕这个问题,比如把中文放到最上面,这样也需要修改android默认的语言列表排序方法,几十种语言那样去改太累了,有时还得考虑国内外软件版本的差异,会很辛苦。那我们怎么把这个列表缩短呢,怎么定制呢?
要缩短这个列表,不就是少加几种语言嘛!没什么技术含量的,只是要找到合适的地方加。笔者使用的android4.0平台。在build\target\product\locales_full.mk文件中,有:
PRODUCT_LOCALES := cs_CZ da_DK de_AT de_CH de_DE de_LI el_GR en_AU en_CA en_GB en_NZ en_SG en_US es_ES fr_CA fr_CH fr_BE fr_FR it_CH it_IT ja_JP ko_KR nb_NO nl_BE nl_NL pl_PL pt_PT ru_RU sv_SE tr_TR zh_CN zh_HK zh_TW am_ET hi_IN $(call inherit-product, build/target/product/languages_full.mk)
玄机就在这里,我们把加以对PRODUCT_LOCALES值的控制就能控制到列表的程度。在这里把我们需要支持的语言加进去,当然这里加的语言关键字都是有约定的。如下:
Locale CANADA Locale constant for en_CA. Locale CANADA_FRENCH Locale constant for fr_CA. Locale CHINA Locale constant for zh_CN. Locale CHINESE Locale constant for zh. Locale ENGLISH Locale constant for en. Locale FRANCE Locale constant for fr_FR. Locale FRENCH Locale constant for fr. Locale GERMAN Locale constant for de. Locale GERMANY Locale constant for de_DE. ………………………………..
在这里可以很方便的做产品的差异化,利用$(TARGET_PRODUCT)环境变量,用ifeq就可以,示例如下:
ifeq ($(TARGET_PRODUCT), crane_ed1021tsd) PRODUCT_LOCALES := en_US en_GB zh_CN zh_HK zh_TW else ifeq ($(TARGET_PRODUCT), crane_ed1021) PRODUCT_LOCALES := en_US en_GB zh_CN zh_HK zh_TW else PRODUCT_LOCALES := cs_CZ da_DK de_AT de_CH de_DE de_LI el_GR en_AU en_CA en_GB en_NZ en_SG en_US es_ES fr_CA fr_CH fr_BE fr_FR it_CH it_IT ja_JP ko_KR nb_NO nl_BE nl_NL pl_PL pt_PT ru_RU sv_SE tr_TR zh_CN zh_HK zh_TW am_ET hi_IN $(call inherit-product, build/target/product/languages_full.mk) Endif