实现让你的APP支持多语言,通常最好的做法是把你的APP里面的字符串单独的提取存放到一个外部文件里面。android开发实现这个就很简单,每个项目里面都有这么一个资源目录。
如果你利用android sdk tools创建一个项目,那么在项目的根目录下会自动创建一个/res目录,这个目录下面的子目录存放着不同类型的数据资源。有一些默认创建的文件,比方说/res/values/string.xml文件,这个文件里面存放你的APP的字符串资源。
创建语言目录和字符串文件
可以在/res目录下创建其他的value目录,来支持多语言,目录的名称是在values名称的后面用一个连字符“-”加上ISO国家代码。比方说:/res/values-es,里面包含着当系统的语言环境为es时候的,程序对应的资源。系统会在运行时,根据系统语言的设定,来载入对应的目录的下的资源。
当你决定了你要支持的语言,那么要创建对应的资源子目录,在它的下面创建字符串资源文件,如下:
MyProject/
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml
把不同语言环境的字符串填入对应的字符串资源文件
在运行的时候,系统会根据系统当前语言环境的设置,使用对应的字符串资源文件里面的字符串值。
下面的例子就针对不同语言的字符串资源文件里面的内容:
English(默认的语言环境),/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>
Spanish,/values-es/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>
注意:你可以对任何的资源使用区域修饰符(或者是任何指定的修饰符),比方说你想在不同的使用区域下使用不同版本的bitmap资源图片。更多的信息请查看
Localization.
使用字符串资源
你可以在你的代码或者是xml文件里面用你的字符串资源文件,使用的时候可以根据定义的时候用到的<string>标记里面的name属性来识别。
在代码中是有的时候,可以按照这个语法标准来调用:R.string.<stringname>. 很多的方法都可以用这种调用方式来获取字符串的值。
例如:
// 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/<stringname>来获取到对应的字符串值。
例如:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />