2013年1月28日月曜日

多言語対応 Supporting Different Languages

参照元(翻訳): Supporting Different Languages | Android Developers

アプリケーションのコードから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 件のコメント:

コメントを投稿