編寫:Lin-H - 原文:http://developer.android.com/training/basics/supporting-devices/languages.html
把UI中的字符串存儲(chǔ)在外部文件,通過代碼提取,這是一種很好的做法。Android可以通過工程中的資源目錄輕松實(shí)現(xiàn)這一功能。
如果使用Android SDK Tools(詳見創(chuàng)建Android項(xiàng)目(Creating an Android Project))來創(chuàng)建工程,則在工程的根目錄會(huì)創(chuàng)建一個(gè)res/的目錄,目錄中包含所有資源類型的子目錄。其中包含工程的默認(rèn)文件比如res/values/strings.xml,用于保存字符串值。
為支持多國語言,在res/中創(chuàng)建一個(gè)額外的values目錄以連字符和ISO國家代碼結(jié)尾命名,比如values-es/ 是為語言代碼為"es"的區(qū)域設(shè)置的簡單的資源文件的目錄。Android會(huì)在運(yùn)行時(shí)根據(jù)設(shè)備的區(qū)域設(shè)置,加載相應(yīng)的資源。詳見Providing Alternative Resources。
若決定支持某種語言,則需要?jiǎng)?chuàng)建資源子目錄和字符串資源文件,例如:
MyProject/
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml
添加不同區(qū)域語言的字符串值到相應(yīng)的文件。
Android系統(tǒng)運(yùn)行時(shí)會(huì)根據(jù)用戶設(shè)備當(dāng)前的區(qū)域設(shè)置,使用相應(yīng)的字符串資源。
例如,下面列舉了幾個(gè)不同語言對(duì)應(yīng)不同的字符串資源文件。
英語(默認(rèn)區(qū)域語言),/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>
Note:可以在任何資源類型中使用區(qū)域修飾詞(或者任何配置修飾符),比如為bitmap提供本地化的版本,更多信息見Localization。
我們可以在源代碼和其他XML文件中通過<string>元素的name屬性來引用自己的字符串資源。
在源代碼中可以通過R.string.<string_name>語法來引用一個(gè)字符串資源,很多方法都可以通過這種方式來接受字符串。
例如:
// 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文件中,每當(dāng)XML屬性要接受一個(gè)字符串值時(shí),你都可以通過@string/<string_name>語法來引用字符串資源。
例如:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />