android framework 研究 怎么在android添加一种新语言,如何入手呢~~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先看setting多语言那块,它是怎么工作的,再对应找到framework中,照猫画虎吧。应该不麻烦的 请问,你们的头像图片,是怎么上传的?我怎么就没看到,CSDN有这功能? http://www.eoeandroid.com/thread-46129-1-1.html 能上外网的朋友们帮忙把http://hi.baidu.com/gigatron/blog/item/9b059d458752dc056a63e548.html/cmtid/0603ec8ab20843bd0e24445d里面的文章给粘贴一下 谢谢啦 ADROID 2.1 架构解析 1 语言定制2010-04-17 21:041 语言定制1.1 ICU4C1.1.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++两个平台下的国际化应用。ICU4C和ICU4C区别不大,但由于ICU4C是开源的,并且紧密跟进Unicode标准,ICU4C支持的Unicode标准总是最新的;同时,因为JAVA平台的ICU4J的发布需要和JDK绑定,ICU4C支持Unicode标准改变的速度要比ICU4J快的多。1.1.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.1.2 定制语言在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)1.3 默认语言默认语言的选择实现是在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)))endefdefine 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"所以,要改变默认语言用下面两种 方法中的一种就行了:1 在PRODUCT_LOCALES字段里,将要选择的语言放在第一位,如:PRODUCT_LOCALES := en_US zh_CN默认语言是英语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。 修改系统语言有两种方式:一、修改主要的配置文件:\froyo\build\target\product\我们可以看到language_full.mk和language_small.mk(这时候你就会想这两个文件到底该修改哪一个呢)打开两个文件我可以看到 在language_full.mk里面有而在language_small.mk里面有因为这些信息最终会被build进system.img里面,所以为了节省系统空间,我们选择language_small.mk在这里面你就可以把你所要添加的语言放到里面~~~如:PRODUCT_LOCALES := en_US en_GB fr_FR it_IT de_DE es_ES zh_CN(en_US其中US指的是地区,而en指的是语言)然后在froyo/build/target/product/full.mk里面做修改:需要注意的是:在这之前,我们需要把我们将要添加的这种语言的字体frameworks\base\data\fonts目录下添加,并修改了Fonts下的Android.mk文件,使得添加的字体库,能make进system.img.然后在froyo/external/icu4c/stubdata/Android.mk通过这样修改,通过这样修改,则这个系统支持中文简体(假设你要添加的就是中文简体的话)了,然后就是在你的各个应用里面就行添加资源文件,让它能随着系统语言的变化而变化。我们建好一个android 的项目后,默认的res下面 有layout、values、drawable等目录这些都是程序默认的资源文件目录,如果要实现多语言版本的话,我们就要添加要实现语言的对应的资源文件。首先我们点击添加Android Xml File按钮,会出现下面的界面:输入文件名:string.xml,选中Values单选框,并把下面左列表中的Region添加到左边的列表里面,并在Region输入框里输入cn,如下图点击Finish按钮,资源文件就会建好了,目录:res\values-zh-rCN(其实上面一大堆操作,就是为生成这个目录)默认生成的string.xml的代码:<?xml version="1.0" encoding="utf-8"?><resources><string name="hello">Hello World, Test!</string><string name="app_name">Test-Multilingual</string></resources>修改刚刚生成的res\values-zh-rCN目录下的string.xml:<?xml version="1.0" encoding="utf-8"?><resources><string name="app_name">测试多语言</string><string name="hello">你好 多语言测试</string></resources> 二、采用代码修改:Android里一个listview会对应一个数据数组,那我们只需在这个数组里按格式添加我们所需要的数据就行了,我们的目标是com.android.settings.LocalePicker.java,在该文件133行位置做如下修改: mLocales = new Loc[finalSize+1]; for (int i = 0; i < finalSize ; i++) { mLocales = preprocess; } Locale temp = new Locale("vi", "VN"); mLocales[finalSize] =new Loc(toTitleCase(temp.getDisplayLanguage(temp)), temp); 这步做完后setting的语言列表里就有了越南语了,但点击越南语后,界面没发现有什么变化,那是因为android系统没有对越南语写响应的国际化资源文件,你可以自己写应用测试 相关的参考资料:一、android如何添加一门新语言?二、如何向android的setting语言列表中添加一门语言三、Android:多语言对应 四、关于2.1添加阿拉伯,希伯来 五、android 语言设置 看来学习framework的童鞋比较少 准备学习中,不知改如何入手呀.....请赐教之,有相关资料的话,发我邮箱[email protected] 谢谢啦 这个跟framework没什么关系所有的语言字符都是由统一编码的.只需要字库支持即可. 这些就是在framework里面完成的啊 你说的这个是底层已经做好支持 在应用层string.xml中才能修改 还没研究到。。正在学MediaPlayer架构 为什么写framework的多国语言支持 我现在用的是日版的rom 我就想往里面添加中文··· 不想改太多·· 看了这文章好长· = = 好难懂啊··LZ能不能帮忙弄个视频教程什么的啊··· 要不好心帮我直接把中文语言包弄进去行不? 打个比方 我是2.2的ANDROID 系统 (日版) 里面没有带中文选项的 可以从国内的那些高手的ROM里面提取出中文语言包 然后再添加到我的ROM里面吗?? android如何修改cpu厂商 Android新手关于目录res/的问题,请帮忙 调用拍照的问题:内存信息丢失,录音中断等 Android环境搭建时~~~高手请进!! android 如何实现SharedPreferences 顺序存储 android真机测试的问题。在网上搜了好久还是没解决!! actionbar中的fragment之间的跳转 新手的初级问题,匿名类如何向外传递结果的问题 Intellij中文乱码 imsi号是什么,通常是几位? android与平板电脑的问题 Android程序调试问题
我怎么就没看到,CSDN有这功能?
里面的文章给粘贴一下 谢谢啦
1.1 ICU4C
1.1.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++两个平台下的国际化应用。ICU4C和ICU4C区别不大,但由于ICU4C是开源的,并且紧密跟进Unicode标准,ICU4C支持的Unicode标准总是最新的;同时,因为JAVA平台的ICU4J的发布需要和JDK绑定,ICU4C支持Unicode标准改变的速度要比ICU4J快的多。1.1.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.1.2 定制语言
在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)1.3 默认语言
默认语言的选择实现是在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)))endefdefine 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"所以,要改变默认语言用下面两种 方法中的一种就行了:1 在PRODUCT_LOCALES字段里,将要选择的语言放在第一位,如:PRODUCT_LOCALES := en_US zh_CN默认语言是英语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。
一、修改主要的配置文件:
\froyo\build\target\product\我们可以看到language_full.mk和language_small.mk(这时候你就会想这两个文件到底该修改哪一个呢)打开两个文件我可以看到 在language_full.mk里面有而在language_small.mk里面有因为这些信息最终会被build进system.img里面,所以为了节省系统空间,我们选择language_small.mk
在这里面你就可以把你所要添加的语言放到里面~~~
如:PRODUCT_LOCALES := en_US en_GB fr_FR it_IT de_DE es_ES zh_CN
(en_US其中US指的是地区,而en指的是语言)
然后在froyo/build/target/product/full.mk里面做修改:需要注意的是:
在这之前,我们需要把我们将要添加的这种语言的字体frameworks\base\data\fonts目录下添加,并修改了Fonts下的Android.mk文件,使得添加的字体库,能make进system.img.然后在froyo/external/icu4c/stubdata/Android.mk通过这样修改,
通过这样修改,则这个系统支持中文简体(假设你要添加的就是中文简体的话)了,然后就是在你的各个应用里面就行添加资源文件,让它能随着系统语言的变化而变化。
我们建好一个android 的项目后,默认的res下面 有layout、values、drawable等目录这些都是程序默认的资源文件目录,如果要实现多语言版本的话,我们就要添加要实现语言的对应的资源文件。首先我们点击添加Android Xml File按钮,会出现下面的界面:
输入文件名:string.xml,选中Values单选框,并把下面左列表中的Region添加到左边的列表里面,并在Region输入框里输入cn,如下图点击Finish按钮,资源文件就会建好了,目录:res\values-zh-rCN(其实上面一大堆操作,就是为生成这个目录)默认生成的string.xml的代码:<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, Test!</string>
<string name="app_name">Test-Multilingual</string>
</resources>修改刚刚生成的res\values-zh-rCN目录下的string.xml:<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">测试多语言</string>
<string name="hello">你好 多语言测试</string>
</resources>
Android里一个listview会对应一个数据数组,那我们只需在这个数组里按格式添加我们所需要的数据就行了,我们的目标是com.android.settings.LocalePicker.java,在该文件133行位置做如下修改:
mLocales = new Loc[finalSize+1];
for (int i = 0; i < finalSize ; i++) {
mLocales = preprocess;
}
Locale temp = new Locale("vi", "VN");
mLocales[finalSize] =new Loc(toTitleCase(temp.getDisplayLanguage(temp)), temp);
这步做完后setting的语言列表里就有了越南语了,但点击越南语后,界面没发现有什么变化,那是因为android系统没有对越南语写响应的国际化资源文件,你可以自己写应用测试
一、android如何添加一门新语言?
二、如何向android的setting语言列表中添加一门语言
三、Android:多语言对应
四、关于2.1添加阿拉伯,希伯来
五、android 语言设置
准备学习中,不知改如何入手呀.....请赐教之,有相关资料的话,发我邮箱[email protected] 谢谢啦
打个比方 我是2.2的ANDROID 系统 (日版) 里面没有带中文选项的 可以从国内的那些高手的ROM里面提取出中文语言包 然后再添加到我的ROM里面吗??