How To Localize an Android App
概要
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)"(フランス語-カナダ)の場合、該当するテキスト文字列の優先順は、
res/values-fr-rCA/strings.xml
(フランス語-カナダ)res/values-fr/strings.xml
(フランス語)res/values/strings.xml
(デフォルト)
となります。(上位のファイルにテキスト文字列のエントリが存在しない場合は、下位のテキスト文字列が使用されます。)
例
単純なAndroidアプリケーションをデフォルトの言語(英語)に加え、日本語に対応させる場合について例を挙げます。
日本語ロケールに対応させる場合は、res/values-ja/
フォルダを作成し、テキスト文字列リソースファイルstrings.xml
を用意します。(strings.xmlファイルはConyac for Businessで翻訳が可能です。)
日本語テキスト文字列リソースのフォルダとファイル(赤い楕円形で囲んだ部分)を追加した場合、Eclipseのパッケージエクスプローラーは以下のような表示になっています。
リソースの翻訳
アプリケーションのリソースファイル(res/values/strings.xml)に翻訳対象となるテキスト文字列の記述を行い、アプリケーションから文字列を呼び出します(補足情報を参照)。多言語対応を行う場合は、テキスト文字列リソースの例を参考に、翻訳されたstrings.xmlを各ロケールのフォルダに格納します。
例
以下は、デフォルト(英語)のリソースファイル(res/values/strings.xml)と、日本語のリソースファイル(res/values-ja/strings.xml)をEclipseのリソースエディタで開いた場合の表示です。今回はロケールによってアプリケーションの名前(app_name)が切り替わるようにします。
デフォルトの言語(英語)(res/values/strings.xml)
青い楕円形で囲んだ部分がリソース名appnameと、appnameリソース名に対応するデフォルトの言語(英語)の値です。
- 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リソース名に対応する日本語の値です。
- 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)"を選択)、アプリケーションの画面を見て、ローカライズされた文字列が表示されていることを確認します。
例
デフォルトの言語(英語)
- アプリケーションの表示
- ホーム画面での表示
日本語
- アプリケーションの表示
- ホーム画面での表示
補足情報
テキスト文字列リソースの種類
以下の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);
参考サイト
Need experienced translators to translate your localization files? Conyac is the perfect solution!
Reliable, Fast, and Affordable.