`
quanminchaoren
  • 浏览: 911296 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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)重新编译即可。

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 多语言 切换

    Android 多语言切换,AndroidStudio开发环境。SDK 28 编译通过。支持 Android 8.0以上版本。

    安卓多语言开发demo

    安卓多语言开发demo,基于studio开发,下载直接可以使用。

    Android 多语言切换demo

    http://blog.csdn.net/cuihaoren01/article/details/51027018的资源

    android 多语言demo

    参考http://download.csdn.net/detail/barryhappy/7176709这位大哥,将ActionBarActivity改成了Activity,减少某些童鞋可能不太会解决的报错。

    Android开发 多语言、指纹登录、手势登录.zip

    Android原生指纹登录、手势登录Demo源码可直接集成到项目中,包内有安装包可安装到手机上查看效果。

    Android高级应用开发教学视频-Android高级应用开发.z05

    Stage3_Lesson2Android的多线程与异步任务 Stage3_Lesson3高级商业界面开发 Stage3_Lesson4Android多媒体的世界 Stage3_Lesson5NDK初步 Stage3_Lesson6电话与短信应用 Stage4_Lesson1项目沟通的语言是UML Stage4_...

    Android-LanguageSupportAndroid切换语言框架

    LanguageSupport:Android切换语言框架

    《Android应用开发》开放实验项目总结报告-模板.doc

    通过Android应用开发的开放实验学生可以熟悉Android应用程序开发的工 " "具、开发语言和开发方法,为今后深入学习甚至进行实际App开发做好技术上的" "准备。 " "2.开放实验项目的任务与要求: " "学生理解Android...

    Android应用开发揭秘.rar

    最重要的是还全面介绍了如何利用原生的C/C (NDK)和Python、Lua等脚本语言(Android Scripting Environment)来开发Android应用;本书实战性强,书中的每个知识点都有配精心设计的示例,尤为值得一提的是,它还以...

    老罗android开发视频教程全集百度网盘下载

    Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面...【第一版第十四章】老罗Android开发视频--多线程编程(7集) 【第一版第十五章】老罗Android开发视频--百度地图实战开发(10集)

    Android高级应用开发教学视频-Android高级应用开发.z19

    Stage3_Lesson2Android的多线程与异步任务 Stage3_Lesson3高级商业界面开发 Stage3_Lesson4Android多媒体的世界 Stage3_Lesson5NDK初步 Stage3_Lesson6电话与短信应用 Stage4_Lesson1项目沟通的语言是UML Stage4_...

    Google Android SDK开发范例大全源码 无解压密码

     本书讲述由浅入深,由Android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合Android的开发者和Android的进阶程序开发者学习。 csdn 另外一个版本有解压时需要密码,本资源无解压密码。

    Android高级应用开发教学视频-Android高级应用开发.z10

    Stage3_Lesson2Android的多线程与异步任务 Stage3_Lesson3高级商业界面开发 Stage3_Lesson4Android多媒体的世界 Stage3_Lesson5NDK初步 Stage3_Lesson6电话与短信应用 Stage4_Lesson1项目沟通的语言是UML Stage4_...

    [14本经典Android开发教程]-3-Android SDK 中文开发文档

    平台上使用JaVa语言进行Android应用开发必须的工具和API接口。 特性 · 应用程序框架 支持组件的重用与替换 · Dalvik 虚拟机 专为移动设备优化 · 集成的浏览器 基于开源的WebKit 引擎 · 优化的图形库 包括定制的...

    Android高级应用开发.z11-Android高级应用开发.z01

    Stage3_Lesson2Android的多线程与异步任务 Stage3_Lesson3高级商业界面开发 Stage3_Lesson4Android多媒体的世界 Stage3_Lesson5NDK初步 Stage3_Lesson6电话与短信应用 Stage4_Lesson1项目沟通的语言是UML Stage4_...

    c#开发Android应用实战

    在这本由多位专家联袂撰写的必备精品书籍的指引下,您不必学习其他编程语言,就可以成为一名成功的Android应用程序开发人员。您将深入理解屏幕控件、UI开发、表、布局和MonoDevelop等知识点,并驾轻就熟地使用Mono ...

    Android应用开发揭秘pdf高清版

    最重要的是还全面介绍了如何利用原生的C,C++(NDK)和Python、Lua等脚本语言(AndroidScriptingEnvironment)来开发Android应用,《Android应用开发揭秘》实战性强,书中的每个知识点都有配精心设计的示例,尤为...

    android开发期末大作业.zip

    2.为学生综合应用本专业所学习的多门课程知识(例如,软件工程、数据库、Java语言、Java Web开发等)创造实践机会。为学生提供主动学习、积极探索与大胆创新的机会。 3.掌握Android手机应用设计的方法与技巧。 三...

    Android应用开发揭秘(pdf )

    Android应用开发揭秘  Windows操作系统的诞生成就了微软的霸主地位,...如何通过NDK利用C、C++以及通过ASE利用Python等脚本语言Android开发应用?  国内首本基于Android 2.0的经典著作,5大专业社区一致鼎力推荐!

    Google Android SDK开发范例大全(第3版).pdf

    内容简介 《Google Android SDK开发范例大全...《Google Android SDK开发范例大全(第3版)》内容由Android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合Android的初学者和Android的进阶程序开发者阅读参考。

Global site tag (gtag.js) - Google Analytics