
本文来自 安卓巴士(www.apkbus.com)整理总结
Android 的国际化与本地化
internationalization (国际化)简称 i18n,因为在 i 和 n 之间还有 18 个字符,localization(本
地化 ),简称 L10n。 一般说明一个地区的语言时,用 语言_地区的形式,如 zh_CN, zh_TW.
各国语言缩写 http://www.loc.gov/standards/iso639-2/php/code_list.php
国家和地区简写
http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
android 对 i18n 和 L10n 提供了非常好的支持。android 没有专门的 API 来提供国际化,而是
通过对不同 resource 的命名来达到国际化,同时这种命名方法还可用于对硬件的区分,如不
同的新视屏用不同的图片。
在 eclipse 的工程中,res 目录有默认几项 resource,如 drawable, layout,menu,values
其余还有
res/anim/ 用来放置动画
res/xml/ 用来放置 style theme 等 xml 定义。
res/raw/ 用来放置 data 数据
我们引用这些 resource 时候,在 java 代码中是通过 R.resource_type.resource_name 的方式来
使用,如 setTitle(R.string.main_title);
还有一种是在 xml 中直接引用,如
<TextView
android:id ="@+id/hello_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
引用了名字为 hello 的字符串。当程序运行时,通过 Resource 类会装载 strings.xml 中
名字为 hello 的字符串。但 Resource 类装载 strings.xml 时会根据当前手机的设置来选择装载
哪一个 xml 文件。这些手机设置有
MCC and MNC, Language and region, Screen dimensions, Wider/taller screens, Screen
orientation,Screen pixel density, Touchscreen type, SDK version,也就是说通过手机当前
语言区域,屏幕的大小,屏幕像素,以及当前 android sdk 的版本号来选择。通过把 strings.xml
放置在以这些选项命名的文件夹下,Resource 类就能正确的装载所需的字符串。
我们以不同的 local 和 region 来做一次国际化,首先 values 表示默认的字符串,也即
当 Resource 找不到匹配的资源时,默认使用 values 文件夹下的资源,其余 drawable 等资源
也是同样的。
当命名这些文件夹的名字时,不同的选项用-分开,而且次序必须和 andorid 文档中 table