Android 国际化与资源自适应
国际化很重要! 就算再有困难,再有挫折,该实施时,也要坚定实现国际化!(7.23 动车劫 温家宝会见中外记者都坚持有翻译随同)
说起Android SDK国际化,通常只需要将界面文字翻译成不同语言,然后将相应的资源文件放到各种语言特定国际化资源目录
资源的自适应性 主要指单独为每一种环境设置资源,例如对480*320 和 854 * 480 两种分辨率的手机设置两种XML布局文件.
1. 对于界面的字符串国际化,实际就是为应用程序提供不同语言的字符串, 对于开发人员要做的确是,为保存各种语言的字符串资源建立国际化目录,然后将相应的资源文件放到这些目录中, 国际化目录的规则如下:
资源目录 + 国际化配置选项
其中资源目录是指 res 目录中的子目录,例如 values,layout等,国际化配置选择项包含很多部分,中间用 " - " 分隔。例如要实现不同语言和地区的国际化,这些配置选项包括语言代号和地区代号。 表示中文和中国的配置选项是 zh-rCN; 表示英文和美国的配置选项是en-rUS. 表示zh 和 en 表示中文和英文;CN 和 US 表示中国和美国; 前面的r 是必须的,
为了区分地区部分,不能单独指定地区,但可以单独指定语言。
步骤:
1. 在res 目录中建立两个文件夹: values-zh-rCN 和 values-en-rUS。 并在这两个目录中各建立一个strings.xml, 内容如下:
values-zh-rCN 目录中的 strings.xml 文件
<resources>
<string name="ok">确定</string>
<string name="cancel">取消</string>
<string name="ignore">忽略</string>
</resources>
values-en-rUS 目录中的strings.xml 文件
<resources>
<string name="ok">OK</string>
<string name="cancel">Cancel</string>
<string name="ignore">Ignore</string>
</resources>
包括values目录下strings.xml文件,虽然有3 个strings.xml文件,但不会冲突。
2. 其他的资源目录也可以采用同样的方式处理语言和地区的国际化,例如在res 目录中建立两个目录: drawable-zh-rCN 和 drawable-en-rUS,并在这两个目录中分别放一个flag.jpg, 然后可以正常引用这个图像资源, 代码:
<ImageView android:id="@+id/iv" android:layout_width="100dp" android:layout_height="80dp" android:src="@drawable/flag" />
如果当前的语言环境未找到相应的资源,如德文,Android 系统会根据具体的资源做出相应的处理,对于字符串资源,如果该资源不存在,会显示该资源在R类中生成的ID值(以十进制显示)
可以从如下地址获得完整的语言和地区的配置选项:
获得语言配置选项 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
除了可以使用资源目录的方式外,第二种方式是: 使用 Locale 对象获得当前的语言环境, 然后根据语言环境决定读取哪个资源文件中的资源,使用这种方式可以将资源文件存放在 assets 目录 。要注意,这里的CN 和 US前面未加前缀 r.代码也在ch13_i18n中,设置title会随着当前语言环境的变化而变化
示意图
具体代码参见 ch13_i18n 工程