編寫:Lin-H - 原文:http://developer.android.com/training/basics/supporting-devices/languages.html
把UI中的字符串存儲在外部文件,通過代碼提取,這是一種很好的做法。Android可以通過工程中的資源目錄輕鬆實現這一功能。
如果使用Android SDK Tools(詳見創建Android項目(Creating an Android Project))來創建工程,則在工程的根目錄會創建一個res/
的目錄,目錄中包含所有資源類型的子目錄。其中包含工程的默認文件比如res/values/strings.xml
,用於保存字符串值。
為支持多國語言,在res/
中創建一個額外的values
目錄以連字符和ISO國家代碼結尾命名,比如values-es/
是為語言代碼為"es"的區域設置的簡單的資源文件的目錄。Android會在運行時根據設備的區域設置,加載相應的資源。詳見Providing Alternative Resources。
若決定支持某種語言,則需要創建資源子目錄和字符串資源文件,例如:
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>
Note:可以在任何資源類型中使用區域修飾詞(或者任何配置修飾符),比如為bitmap提供本地化的版本,更多信息見Localization。
我們可以在源代碼和其他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);
在其他XML文件中,每當XML屬性要接受一個字符串值時,你都可以通過@string/<string_name>
語法來引用字符串資源。
例如:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />