Androidアプリのローカライズ方法

概要

Androidでは、デバイス(スマートフォン、タブレットなど)で設定されたロケールに対応したリソースを用いて表示を行います。 リソースには、テキスト文字列、レイアウト、サウンド、グラフィックが含まれており、標準のテキスト文字列は、アプリケーションのres/values/strings.xmlファイルに格納されています。

テキスト文字列リソース

以下にテキスト文字列リソースを例にした翻訳の例を示します。 Androidアプリケーションのテキスト文字列のローカライズを行う場合、各ロケールに対応したリソースフォルダ内にxmlファイル(標準はstrings.xml)を用意する必要があります。 例えば、英語(アメリカ合衆国とイギリス)、フランス語(フランスとカナダ)、日本語(日本)の3ヶ国語(5地域)に対応する場合、以下のリソースフォルダとファイルを用意します。

  • res/values-en/strings.xml (英語)
  • res/values-fr/strings.xml (フランス語)
  • res/values-jp/strings.xml (日本語)

各言語だけでなく、各地域にあわせたローカライズを行うことも可能です。その場合、上記のリソースフォルダとファイルに加え、以下のようなリソースフォルダとファイルを用意します。

  • res/values-en-rUS/strings.xml (英語-アメリカ合衆国)
  • res/values-en-rGB/strings.xml (英語-イギリス)
  • res/values-fr-rFR/strings.xml (フランス語-フランス)
  • res/values-fr-rCA/strings.xml (フランス語-カナダ)

Androidの設定が"Français (Canada)"(フランス語-カナダ)の場合、該当するテキスト文字列の優先順は、

  1. res/values-fr-rCA/strings.xml (フランス語-カナダ)
  2. res/values-fr/strings.xml (フランス語)
  3. res/values/strings.xml (デフォルト)

となります。(上位のファイルにテキスト文字列のエントリが存在しない場合は、下位のテキスト文字列が使用されます。)

単純なAndroidアプリケーションをデフォルトの言語(英語)に加え、日本語に対応させる場合について例を挙げます。 日本語ロケールに対応させる場合は、res/values-ja/フォルダを作成し、テキスト文字列リソースファイルstrings.xmlを用意します。(strings.xmlファイルはConyac for Businessで翻訳が可能です。) 日本語テキスト文字列リソースのフォルダとファイル(赤い楕円形で囲んだ部分)を追加した場合、Eclipseのパッケージエクスプローラーは以下のような表示になっています。

folders_after

リソースの翻訳

アプリケーションのリソースファイル(res/values/strings.xml)に翻訳対象となるテキスト文字列の記述を行い、アプリケーションから文字列を呼び出します(補足情報を参照)。多言語対応を行う場合は、テキスト文字列リソースの例を参考に、翻訳されたstrings.xmlを各ロケールのフォルダに格納します。

以下は、デフォルト(英語)のリソースファイル(res/values/strings.xml)と、日本語のリソースファイル(res/values-ja/strings.xml)をEclipseのリソースエディタで開いた場合の表示です。今回はロケールによってアプリケーションの名前(app_name)が切り替わるようにします。

デフォルトの言語(英語)(res/values/strings.xml)

青い楕円形で囲んだ部分がリソース名appnameと、appnameリソース名に対応するデフォルトの言語(英語)の値です。

strings.xml (English)

  • XMLファイルのソースコード
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Localized App</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>

</resources>

日本語 (res/values-ja/strings.xml)

赤い楕円形で囲んだ部分がリソース名appnameと、appnameリソース名に対応する日本語の値です。

strings.xml (Japanese)

  • XMLファイルのソースコード
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">ローカライズされたアプリ</string>
    <string name="action_settings">設定</string>
    <string name="hello_world">こんにちは 世界!</string>

</resources>

アプリケーションの動作テスト

実際に実機またはシミュレータでロケールの切り替えを行い(英語環境の場合: Home > Menu > Settings > Languages & Input > Languageから"日本語"を選択、日本語環境の場合: ホーム > メニュー > 設定 > 言語から"English (United States)"を選択)、アプリケーションの画面を見て、ローカライズされた文字列が表示されていることを確認します。

デフォルトの言語(英語)

  • アプリケーションの表示

Localized App (English)

  • ホーム画面での表示

Localized App Icon (English)

日本語

  • アプリケーションの表示

Localized App (Japanese)

  • ホーム画面での表示

Localized App Icon (Japanese)

補足情報

テキスト文字列リソースの種類

以下の3タイプのXMLリソースが存在します。

String

1つの文字列を提供するXMLリソースです。

  • res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello!</string>
</resources>
  • Viewからの呼び出し
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello" />
  • Javaコードからの呼び出し
String string = getString(R.string.hello);

String Array

文字列の配列を提供するXMLリソースです。

  • res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
    </string-array>
</resources>
  • Javaコードからの呼び出し
Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);

Quantity Strings (Plurals)

複数形に対して異なる文字列を提供するXMLリソースです。

  • res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals name="numberOfSongsAvailable">
        <item quantity="one">One song found.</item>
        <item quantity="other">%d songs found.</item>
    </plurals>
</resources>
  • Javaコードからの呼び出し
int count = getNumberOfsongsAvailable();
Resources res = getResources();
String songsFound = res.getQuantityString(R.plurals.numberOfSongsAvailable, count, count);

参考サイト

ローカライズファイルを翻訳するのに経験豊富な翻訳者が必要ですか? Conyacは最適なソリューションです。
早く、低価格で頼れるサービスです。