アプリケーションのコードからUIに使っている文字列を抜き出し、それらを別ファイルへ保存しておくことは良い慣習である。Androidは各プロジェクト毎にリソースディレクトリを持つことで、これを容易に行える。
プロジェクトの作成にAndroid SDK Toolsを使えば、プロジェクトのトップレベルに res/ ディレクトリが生成されている。様々なリソースタイプに対するサブディレクトリがこのres/ディレクトリにある。いくつかのデフォルトのファイル、例えば res/values/strings.xml があり、これはstringの値を保持している。
Create Locale Directories and String Files
より多くの言語をサポートするためにres/の中に values ディレクトリを追加作成し、valueはハイフンとISO国コードをディレクトリ名の後ろに付加する。例えば、values-es/ は言語コード"es"の地域に対するリソースを含むディレクトリである。Androidは実行時に端末のロケール設定に従って適したリソースをロードする。
サポートする言語を決めたら、サブディレクトリとstringファイルを次のように作成する。
MyProject/
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml
各ロケールに対するstringの値を適切なファイルへ加える。
実行時に、ユーザーの端末にセットされているロケールに応じて、適切なstringリソースのセットがAndroid systemによって使用される。
例えば、次の例は異なる言語に対する違うstringリソースである。
English(default locale), /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">Mi Aplicación</string>
<string name="hello_world">Hola Mundo!</string>
</resources>
French, /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 drawableのローカライズされたバージョンを提供したいときなど。詳しくはLocalizationを参照のこと。
Use the String Resources
<string>のname属性によって定義されたリソース名を用いることでコードやそのほかのXMLファイルの中でstringリソースを参照することが可能である。
ソースコートの中で次のシンタックスでstringリソースを参照できる。R.strng.<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ファイルでは、string値を代入できるXMLの属性であればどこでも次のシンタックスでstringリソースを参照できる。
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
0 件のコメント:
コメントを投稿