- 浏览: 81486 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
_lsliang:
直接使用Query的addEntity方法?
获取多表中的数据 -
zhangkehbg:
待续~~~~
几种常用的排序算法
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
本文是主要对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
发表评论
-
高通平台Performance机制学习总结
2018-02-07 15:13 5285高通平台Performance机制学习总结 利用在高通平台中的 ... -
实现返回键(back)和任务管理键(app_switch)功能的调换
2018-01-18 16:01 1635近期有一个需求在不同的国家操作习惯不一样,需要将back键和a ... -
Makefile里PHONY的相关介绍
2017-08-04 15:28 714Phony Targets PHONY 目标并非实际的文件名 ... -
如何抓取 framework input 事件相关 log
2017-02-04 16:31 3153[DESCRIPTION] 出现事件输入相关的问题时, 建议 ... -
如何用getevent查看C-TouchPanel上报数据?
2017-02-04 16:28 2336[DESCRIPTION] 如何用getevent查看 ... -
Android语言定制(二)
2017-01-11 10:47 0android 语言定制 本文是主要对android定制多语言 ... -
Android 语言定制(一)
2017-01-11 10:38 1653Android多语言支持以及各国语言Values文件夹命名规则 ... -
Android 各国语言码
2017-01-11 10:24 1719在做海外项目的时候往往需要添加各种海外语言,比如 越南语、印尼 ... -
Native堆栈解析addr2line
2016-12-08 15:34 4782Native堆栈解析addr2line 命令: aarch6 ... -
git clone Android 源码
2016-11-30 10:48 1481git clone https://github.com/ ... -
Android Virtual Device与串口调试助手间进行收发数据通信
2016-11-29 17:41 4278实现目标:Android Virtual Device与串口调 ... -
Android init.rc语法总结
2016-11-18 11:29 1266本文转载自:http://blog.csdn.net/cham ...
相关推荐
在Android平台上,UI(用户界面)定制是一项关键的技术任务,它允许开发者根据需求和品牌风格创建独特的用户体验。这里,我们探讨的是"android UI定制的一些资料",这些资料可能包括设计原则、布局技巧、自定义视图...
#### 二、Android系统架构分析 - **系统架构概述**: - Android系统的架构可以分为四个主要层次:Linux内核层、硬件抽象层(HAL)、应用程序框架层以及应用程序层。 - Linux内核提供了核心系统服务,如安全性、...
1. **OEM定制**:不同的Android设备制造商可能会对Setup Wizard进行定制,添加自己的品牌特色或额外的设置选项。 2. **企业部署**:对于企业环境,Setup Wizard还可以预设一些特定的配置,如自动连接公司网络、安装...
国际化是指设计出可以适应不同地区和语言的产品,而本地化则是将这些产品根据特定地区的文化、语言和习惯进行定制的过程。 在Android中,多语言的支持主要依赖于资源文件夹的结构。对于这个demo,我们可以在`res`...
下面将详细介绍Android语言切换的实现原理、步骤以及涉及到的相关知识点。 一、Android系统语言架构 Android系统支持多语言,其语言支持主要基于两个层次:系统级语言和应用级语言。系统级语言是整个Android系统的...
这些资源根据不同地区的语言和文化习惯进行定制。在Android Studio中,资源通常存储在res目录下,不同语言的资源放在相应的values-xx目录下,如values-en(英语)、values-fr(法语)等。 二、创建语言资源文件 1. ...
在Android开发领域,私人定制版通常指的是针对特定用户或企业需求进行深度定制的系统或应用。这类定制版可能包括特定的界面设计、功能模块、安全策略等,以满足非通用的使用场景。在这个主题中,"Android私人定制版...
在Android操作系统中,语言设置是用户体验的关键组成部分,它允许用户根据个人喜好或需求选择不同的界面语言。Android 4.2版本是Google推出的一个重要更新,带来了多项改进和新功能。当我们谈论“android 4.2添加...
Android Kitchen是一款专为Android系统爱好者和开发者设计的定制工具,由光头佬开发并更新至V0.224版本。这个工具集成了多种功能,主要用于修改、个性化和优化Android ROM,让用户能够根据自己的需求打造独一无二的...
随着移动开发的需求日益增长,Go语言也逐渐涉足到Android应用开发领域,"Go-android-go"或"android-go"项目就是这样的一个尝试,它为开发者提供了使用Go语言编写原生Android应用的可能。 这个项目的核心目标是创建...
开发Android车辆定制软件需要掌握Java或Kotlin语言,使用Android Studio集成开发环境。开发者需要理解Android SDK、AndroidManifest.xml文件、Activity生命周期、Intent机制等基础知识。 2. **用户界面设计**:用户...
二、`Android.mk`到`Android.bp`的转换 转换过程通常涉及以下几个步骤: 1. **理解模块结构**:首先,需要了解`Android.mk`文件中定义的各个模块类型,如`STATIC_LIBRARY`、`SHARED_LIBRARY`、`EXECUTABLES`等,...
"Android-一个简单的可定制的Android About页面" 提供了一种简单的方法来构建这样的页面,尤其适合那些希望快速实现此功能的开发者。这个项目通常会包含版权信息、应用版本、开发者信息、使用许可等内容,同时允许...
Android Email应用支持多语言环境,源码中包含了各种语言的字符串资源,以及根据设备设置动态切换语言的逻辑。 10. **性能优化**: 源码中还包含了许多性能优化策略,如内存管理、数据缓存、异步加载等,确保应用...
在Android平台上,定制桌面是一项有趣且富有挑战性的任务,它涉及到多个核心概念和技术。下面将详细阐述Android定制桌面的关键知识点: 1. **Activity**: Activity是Android应用的基本组件,代表了一个用户可见的...
【Android Kitchen v0.198 安卓ROM定制厨房工具】 Android Kitchen 是一个专为Android用户设计的软件,主要用于自定义和修改Android ROM。这个工具集提供了多种功能,允许用户根据自己的需求调整和优化手机的操作...
### Android基础定制详解 #### 一、开关机LOGO与动画 在进行Android系统的定制时,开关机LOGO与动画的设置是用户感知系统个性化的重要环节之一。这不仅能够提升品牌形象,还能为用户提供更好的视觉体验。 **具体...
在这个特定的项目"Android Studio项目颜色选择器"中,我们关注的是一个用于用户选择颜色的组件,它具备多语言支持、屏幕旋转适应以及尺寸调整的能力。 颜色选择器在许多应用中都是一个重要的组成部分,例如设计工具...
总的来说,Android-结巴分词的Android版本是一个专为Android平台定制的中文分词工具,通过优化和调整,提高了在移动设备上的运行效率,使得开发者能够轻松地在Android应用中实现中文文本的高效处理。对于从事Android...