lightbulb_outline Please take our October 2018 developer survey. Start survey

異なる言語のサポート

アプリのコードから UI 文字列を抜き出して外部のファイルに保存すると、さまざまな利点があります。 Android では、各 Android プロジェクトのリソース ディレクトリを使うことでこれを簡単に実現できます。

Android SDK Tools(Android プロジェクトの作成を参照)を使ってプロジェクトを作成した場合、プロジェクトのトップレベルに res/ ディレクトリが自動的に作られます。 この res/ ディレクトリには、さまざまなリソースタイプのサブディレクトリがあります。 また res/values/strings.xml など、文字列の値を保持するデフォルト ファイルもいくつかあります。

ロケール ディレクトリと文字列ファイルを作成する

サポートする言語を追加するには、res/ 内に values ディレクトリを追加します。ディレクトリ名の末尾には、ハイフンと ISO 言語コードを付けます。 たとえば values-es/ ディレクトリには、言語コードが「es」のロケール用の基本的なリソースが含まれています。 Android によって、実行時の端末のロケール設定に応じて該当するリソースが読み込まれます。 詳細については、代替リソースを提供するをご覧ください。

サポートする言語を決定したら、リソースのサブディレクトリと文字列リソースファイルを作成します。 次に例を示します。

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>

注: ビットマップ ドローアブルのローカライズ バージョンを提供する場合など、ロケール識別子(または何らかの構成識別子)は、すべてのリソースタイプで使用できます。 詳細については、ローカライズをご覧ください。

文字列リソースを使用する

ソースコードと他の 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" />