说明:本文是我自己对官方入门教程(Training)的翻译,仅仅是为了记录自己的学习过程。由于本人英语水平太低,基本上是靠金山词霸加上自己的理解,所以翻译的不好。如果你有好的意见请留言,谢谢!

支持不同的语言(Supporting Different Languages)

一个比较好的做法是,将用户界面(UI)中显示的字符串从你的应用程序代码中提取出来,保存在一个外部文件中。Android在每一个工程中都建立了资源目录。

如果你的工程是使用Android SDK工具创建的(参考Creating an Android Project),那么工具会在项目的顶层目录中创建 res/ 目录。在这个 res/ 目录中还有各种类型的资源子目录。也有一些默认的文件,如res/values/strings.xml,其中包含了字符串的值。

创建本地目录和字符串文件(Create Locale Directories and String Files)

为了添加更多的语言支持,可以在res/目录下添加更多的values目录,以连字符和ISO国家代码为结尾。例如,values-es/就是保存区域语言代码为“es”的资源目录。程序运行时,Android通过设备的区域设置来加载适当的资源。

一旦你确定了要支持哪种语言,你就要创建资源子目录和字符串资源文件。例如:

MyProject/
    res/
       values/
           strings.xml
       values-es/
           strings.xml
       values-fr/
           strings.xml

在正确的地区资源文件中添加字符串信息。

在程序运行的时候,Android系统会根据当时用户设备上设置的区域代码来使用适当的字符串资源。

举个例子,下面有两个不同语言的字符串资源文件。

英语(缺省的区域设置),/values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">My Application</string>
    <string name="hello_world">Hello World!</string>
</resources>

西班牙语,/values-es/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Mi Aplicación</string>
    <string name="hello_world">Hola Mundo!</string>
</resources>

法语,/values-fr/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Mon Application</string>
    <string name="hello_world">Bonjour le monde !</string>
</resources>

注意:你可以在任何资源类型上使用区域限定符(或任何配置修饰符),如果你想提供本地化版本的位图绘制。更多信息,详见Localization。

使用字符串资源(Use the String Resources)

你可以在源代码和其他XML文件中使用资源名称(使用<string>元素的name属性定义的)来引用字符串资源。

在源代码中,你可以通过R.string.<string_name>这种语法来引用一个字符串资源。还有很多引用字符串资源的方法。

例如:

// Get a string resource from your app's Resources
String hello = getResources().getString(R.string.hello_world);

// Or supply a string resource to a method that requires a string
TextView textView = new TextView(this);
textView.setText(R.string.hello_world);
// Get a string resource from your app's Resources
String hello = getResources().getString(R.string.hello_world);

// Or supply a string resource to a method that requires a string
TextView textView = new TextView(this);
textView.setText(R.string.hello_world);

在其它XML文件中,你随时可以通过语法@string/<string_name>来引用一个字符串资源。

例如:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />