安卓开发文档翻译:支持不同语言,Supporting Different Languages
应当按照以下最佳实践来做:从妳的应用程序的代码中提取出用户界面字符串,并且将它们放置在外部的文件中。安卓系统使得这种事情做起来狠简单:它在每个安卓项目中都提供了一个资源目录。
如果 妳是使用 Android SDK Tools创建 的项目 (阅读 创建 一个安卓项目 ) ,那么,工具包会在项目的顶级目录下创建一个 res/ 目录 。 在这个 res/ 目录 中放置的是各种各样类型的资源的子目录。 还会有一些默认文件,例如 res/values/strings.xml ,其中放置的是妳的那些字符串。
要支持更多语言,则,在 res/ 中创建一些额外的 values 目录, 其目录名中要包含一个连字符,接下来是 ISO语言编码 。例如, values-es/ 目录 ,包含 的是针对语言代码"es"的语系的简单资源。安卓 会在运行时刻根据设备的语系设置来载入适当的资源。欲知更多信息 ,则阅读 提供替代资源 。
当妳确定了要支持的语言之后,就应当创建对应的资源子目录和字符串资源文件。例如:
MyProject/
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml
对于每种语系,将字符串值加入到对应的文件中。
在运行时刻,安卓系统会根据当前在用户的设备上设置的语系来载入适当的字符串资源。
例如,以下是针对不同语言的一些不同的字符串资源文件。
英文(默认语系) , /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>
注意: 妳可以针对任何种类的资源使用语系标识符 (或者任何 的配置选项标识符 ) ,例如, 妳可以针对位图绘图对象提供本地化的版本。欲知更多信息, 则阅读 本地 化 。
妳可以在源代码和其它XML 文件中使用 <string> 元素的 name 属性指定的资源名字来引用字符串资源。
在代码中,可使用这样的语法来引用字符串资源: R.string.<string_name> 。 有多种方法都接受以这种形式传递的字符串参数。
例如:
// 从妳的应用程序的 资源 中获取到一个字符串资源
String hello = getResources () . getString ( R . string . hello_world );
// 或者,向一个需要传入字符串的方法中提供一个字符串资源
TextView textView = new TextView ( this );
textView . setText ( R . string . hello_world );
在其它的 XML文件 中, 可以在接受一个字符串值的XML 属性中使用这种语法来引用一个字符串资源: @string/<string_name> 。
例如:
<TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/hello_world" />
Revolution News!
Your opinionsHxLauncher: Launch Android applications by voice commands