android 语言定制

本文是主要对android定制多语言的问题进行深入研究后,总结了其定制的机制和其具体实现方法。如果想深入了解其定制的机制,可阅读本文第一部分,如果只想了解如何定制,请参考第二部分。

第一部分 多语言定制的机制

1、ICU4C简介

ICU4C(ICU for C, http://site.icu-project.org/ ) 是ICU在C/C++平台下的版本, ICU(International Component for Unicode)是基于"IBM公共许可证"的,与开源组织合作研究的,
用于支持软件国际化的开源项目。ICU4C提供了C/C++平台强大的国际化开发能力,软件开发者几乎可以使用ICU4C解决任何国际化的问题,根据各地的风俗和语言习惯,实现对数字、货币、时间、日期、和消息的格式化、解析,对字符串进行大小写转换、整理、搜索和排序等功能,必须一提的是,ICU4C提供了强大的BIDI算法,对阿拉伯语等BIDI语言提供了完善的支持。

ICU首先是由Taligent公司开发的,Taligent公司现在被合并为IBM?公司全球化认证中心的Unicode研究组,然后ICU由IBM和开源组织合作继续开发,开源组织给与了ICU极大的帮助。

开始ICU只有Java平台的版本,后来这个平台下的ICU类被吸纳入SUN公司开发的JDK1.1,并在JDK以后的版本中不断改进。C++和C平台下的ICU是由JAVA平台下的ICU移植过来的,移植过的版本被称为ICU4C,来支持这C/C++两个平台下的国际化应用。 ICU4J和ICU4C区别不大,但由于ICU4C是开源的,并且紧密跟进Unicode标准,ICU4C支持的Unicode标准总是最新的;同时,因为JAVA平台的ICU4J的发布需要和JDK绑定,ICU4C支持Unicode标准改变的速度要比ICU4J快的多。

2、 ANDROID语言包

Android 使用的语言包就是ICU4C,位置:external/icu4c。Android支持的语言有: 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.

Locale ITALIAN

Locale constant for it.

Locale ITALY

Locale constant for it_IT.

Locale JAPAN

Locale constant for ja_JP.

Locale JAPANESE

Locale constant for ja.

Locale KOREA

Locale constant for ko_KR.

Locale KOREAN

Locale constant for ko.

Locale PRC

Locale constant for zh_CN.

Locale SIMPLIFIED_CHINESE

Locale constant for zh_CN.

Locale TAIWAN

Locale constant for zh_TW.

Locale TRADITIONAL_CHINESE

Locale constant for zh_TW.

Locale UK

Locale constant for en_GB.

Locale US

Locale constant for en_US.

3、定制语言

定制语言在PRODUCT_LOCALES字段里添加需要语言,如: PRODUCT_LOCALES := en_US zh_CN,则系统里只有英语和汉语两种语言。然后语言的选择处理是在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) /

$(if $(findstring fi,$(PRODUCT_LOCALES)),large) /

$(if $(findstring he,$(PRODUCT_LOCALES)),large) /

$(if $(findstring hr,$(PRODUCT_LOCALES)),large) /

$(if $(findstring hu,$(PRODUCT_LOCALES)),large) /

$(if $(findstring id,$(PRODUCT_LOCALES)),large) /

$(if $(findstring ko,$(PRODUCT_LOCALES)),large) /

$(if $(findstring nb,$(PRODUCT_LOCALES)),large) /

$(if $(findstring pt,$(PRODUCT_LOCALES)),large) /

$(if $(findstring ro,$(PRODUCT_LOCALES)),large) /

$(if $(findstring ru,$(PRODUCT_LOCALES)),large) /

$(if $(findstring sk,$(PRODUCT_LOCALES)),large) /

$(if $(findstring sr,$(PRODUCT_LOCALES)),large) /

$(if $(findstring sv,$(PRODUCT_LOCALES)),large) /

$(if $(findstring th,$(PRODUCT_LOCALES)),large) /

$(if $(findstring tr,$(PRODUCT_LOCALES)),large) /

$(if $(findstring uk,$(PRODUCT_LOCALES)),large) /

$(if $(findstring zh,$(PRODUCT_LOCALES)),large) /

$(if $(findstring ja,$(PRODUCT_LOCALES)),us-japan) /

$(if $(findstring it,$(PRODUCT_LOCALES)),us-euro) /

$(if $(findstring pl,$(PRODUCT_LOCALES)),us-euro) /

$(if $(findstring cs,$(PRODUCT_LOCALES)),default) /

$(if $(findstring de,$(PRODUCT_LOCALES)),default) /

$(if $(findstring fr,$(PRODUCT_LOCALES)),default) /

$(if $(findstring nl,$(PRODUCT_LOCALES)),default) /

us)

4、默认语言

默认语言的选择实现是在build/core/Makefile里,从PRODUCT_LOCALES里选择第一个语言作为默认语言,如下:

define default-locale $(subst _, , $(firstword $(1)))

endef

# Selects the first locale in the list given as the argument

# and returns the language (or the region)

define default-locale-language $(word 2, 2, $(call default-locale, $(1)))

endef

define default-locale-region $(word 3, 3, $(call default-locale, $(1)))

Endef ... PRODUCT_DEFAULT_LANGUAGE="$(call default-locale-language,$(PRODUCT_LOCALES))" /

PRODUCT_DEFAULT_REGION="$(call default-locale-region,$(PRODUCT_LOCALES))"

然后通过build/tool/buildinfo.sh文件将如下段写到文件build.prop,如下:

echo "ro.product.locale.language=$PRODUCT_DEFAULT_LANGUAGE"

echo "ro.product.locale.region=$PRODUCT_DEFAULT_REGION" 。

因此,要改变默认语言用下面两种方法中的一种就行了:

4.1、在PRODUCT_LOCALES字段里,将要选择的语言放在第一位,如: PRODUCT_LOCALES := en_US zh_CN 默认语言是英语;

4.2、在persist.sys.language 和persist.sys.country 里指定语言,如下: PRODUCT_PROPERTY_OVERRIDES := /

persist.sys.language=zh /

persist.sys.country=CN build.prop文件的处理是在system/core/init/property_service.c。

第二部分 多语言定制的方法

1、多语言定制的实现步骤

1)进入build/target/product目录,在languages_full.mk或languages_small.mk文件中,修改PRODUCT_LOCALES的值,来定制语言,比如PRODUCT_LOCALES := en_US zh_CN zh_TW en_GB fr_FR it_IT de_DE es_ES;

2)相同目录下,修改full.mk文件的

$(call inherit-product, build/target/product/languages_small|full.mk)语句来切换所使用的文件;

3)重新编译即可。

也可以修改frameworks/base/core/java/com/android/internal/app/LocalePicker.java

2、设置默认语言的实现步骤

1)进入build/target/product目录,修改文件core.mk的PRODUCT_PROPERTY_OVERRIDES 值,例如,欲修改为默认中文,则增加

“/ persist.sys.language=zh / persist.sys.country=CN”,增加后的语句如PRODUCT_PROPERTY_OVERRIDES := /

ro.config.notification_sound=OnTheHunt.ogg /

ro.config.alarm_alert=Alarm_Classic.ogg / persist.sys.language=zh / persist.sys.country=CN

2)重新编译即可。

3、与多语言定制相关的字段及其所在的文件

PREVIOUS_BUILD_CONFIG out/target/product/dream/previous_build_config.mk

NO_FALLBACK_FONT的定义 device/htc/dream-sapphire/BoardConfigCommon.mk

NO_FALLBACK_FONT的调用 frameworks/base/data/fonts/Android.mk

extra_locales CUSTOM_LOCALES nodpi mdpi hdpi build/core/product_config.mk

PRODUCT_PROPERTY_OVERRIDES build/target/product

build.prop out/target/product/generic/system

时间: 2024-10-10 02:29:00

android 语言定制的相关文章

android 系统定制的小技巧

<转>android 系统定制的小技巧(网络收集) 1开机图片: android-logo-mask.pngandroid-logo-shine.png 这两个图片一个在上一个在下 ./out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/classes/assets/images/android-logo-shine.png./frameworks/base/core/res/assets/image

android 系统定制的小技巧(网络收集)

1开机图片: android-logo-mask.png android-logo-shine.png 这两个图片一个在上一个在下 ./out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/classes/assets/images/android-logo-shine.png ./frameworks/base/core/res/assets/images/android-logo-shine.png

android 语言切换过程分析 (zhuan)

最近在看一个bug,系统切换语言后,本来退到后台的音乐,会在通知栏上显示通知.为了解决这个bug,我学习了下android的语言切换流程,也参考了大量其他人的资料.(主要参考了http://blog.csdn.net/wqhjfree/article/details/8244520)在这里我将自己的探索记录下来,作为自己的学习记录,也希望能对有同样需要的人有个帮助.刚学android不久,如果中间有什么问题不对的请多多谅解,并指出错误,多交流,共同进步下. 1.从setting入手,我们可以知道

android 语言切换过程分析

android 语言切换过程分析 2014-02-27 18:13 1207人阅读 评论(0) 收藏 举报 语言切换android语言切换android改变语言 最近在看一个bug,系统切换语言后,本来退到后台的音乐,会在通知栏上显示通知.为了解决这个bug,我学习了下android的语言切换流程,也参考了大量其他人的资料.(主要参考了http://blog.csdn.net/wqhjfree/article/details/8244520)在这里我将自己的探索记录下来,作为自己的学习记录,也希

Android 语言国际化

前言 我们在使用Android手机系统的时候经常在"设置"项里面会提供用户多种系统语言选择,比如:中文.英语-- 大家或许已经发现这些语言显示顺序都是"从左往右":但是有一些语言是"从右往左"显示的,比如阿拉伯语.希伯来语等语言,当在这种语言环境下时,我们需要怎么来处理布局文件呢?接下来的时间我们就来讨论处理阿拉伯语等"从右往左"显示语言的问题. 布局 首先我们先讲解布局问题,在Android系统中为了支持不同语言显示,可以定

Android系统定制——Download Android System 及加载system镜像文件

定制android系统(配置及相关系统的镜像文件),具体可参考:Driver_All_in_One_V1.0--MT6735_6753.pdf文档,特别需要理解的是Download部分. 与之对应的软件是:Smart Phone Flash Tool,一般是在菜单栏的Download部分进行选择操作. Download-agent(下载代理):选择 \升级固件与升级固件的工具\SP_Flash_Tool_exe_Windows_v5.1536.00.000 文件(通常不用特别选择,使用默认的即可

为Android开发者定制的搜索引擎

我在谷歌上定制了一个专门针对Android开发者的搜索引擎,加载慢的童鞋考虑FanQiang吧,作为技术人员使用Google才是王道. 在此推荐给大家:Android搜索引擎 搜索内容:Android方面的问答.技术文章.API.开源项目等. 搜索范围:StackOverflow.Github.Google Code.Eoe.开源中国.CSDN.博客园.Android巴士.搜集的各种Android开源小站等. 效果图:

(转)Android SlidingTabLayout定制分割线和指示条颜色

本文转载与:http://blog.csdn.net/zhangphil/article/details/48863347 Android SlidingTabLayout默认的滑动指示条是系统默认的某个蓝色系色值,分割线是灰色.如果要自定义实现滑动指示条和分割线定制颜色,则主要通过SlidingTabLayout的setCustomTabColorizer()方法实现.现在给出一个例子加以说明.(1)首先做一个MainActivity,此MainActivity没有实质意义,只是作为第二步加载

android ProgressBar定制模式,自定义模式动画文件

1.indeterminate mode | 没有具体进度的进度条 1.1 定制动画文件[html] view plaincopy <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminateDrawable="@drawable/progress_my_style" style=&quo