リソースの多言語対応
|Androidは機器の状態、言語設定に応じて、アプリケーションのリソース(画像、文字列、その他Rawデータ)を自動で選択できます。
英語やドイツ語など各地域にあわせたリソースを用意するだけで、さまざまな地域へ向けたローカライゼーションが可能です。
今回は英語対応を例に、多言語リソースの使い方を解説します。
リソースの種類
リソースは右図のように、いくつかの種類があり、resディレクトリ以下に配置します。
drawableの中には画像、valuesの中には文字列、といった具合です。これらリソースの種類・タイプでプロジェクトのres以下の構成が決まります。
リソースの構成は多言語対応だけでなく、多解像度対応などでも重要な要素となります。
リソースとディレクトリの関係
ディレクトリ | リソースの種類 |
---|---|
anim/ | アニメーション用 |
color/ | 色の定義 |
drawable/ | ビットマップ(.png .9.png .jpg .gif)、図形 |
layout/ | レイアウト(UIの定義)ファイル |
menu/ | オプションメニューやコンテキストメニュー、サブメニュー用 |
raw/ | バイナリファイル。mp3などInputStream |
values/ | 文字列(string.xml)などXML形式の標準りソース |
xml/ | 任意のXMLファイル。Resources.getXML()で利用 |
多言語対応
リソースの多言語対応は、res/以下のディレクトリ(たとえばres/values)に修飾子を付与するだけで、簡単に作成できます。
日本語と英語(デフォルト)に対応する場合、下記2つのリソースを用意します。
- values/string.xml
- values-ja/string.xml
valuesディレクトリに修飾子としてjaを付与します。これで日本語ロケールの場合は、日本語でメッセージが表示されます。
※今回は、国外のユーザーに対して分り易くするためデフォルトを英語(en)としています。
values/string.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, orientationSensorActivity!</string> <string name="app_name">orientationSensorActivity</string> </resources>
values-ja/string.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">こんにちは!アクティビティ! </string> <string name="app_name">方位センサ アクティビティ</string> </resources>
プロジェクト内では、文字列リソースをR.string.helloやR.string.app_nameと表現できます。いままでのStringと同じ扱いですね。しかし、多言語対応に当たって、ひとつの疑問が浮かびます。それは2つ以上リソースがある場合は、使い分ける必要があるのか?ということです。
Androidはリソース切り替えを自動的に行い、使い分けを意識しなくてもよい設計になっています。
多言語対応にあたって、基本的には開発者はres/以下に各言語・地域向けのリソースを用意するだけです。
対応言語を増やすには
言語を示す修飾子は、ISO 639-1形式で指定できます。
参考1:http://www.loc.gov/standards/iso639-2/php/code_list.php
参考サイトには、 en / ja 以外の言語コードも詳しく掲載されています。
たとえば、
values-fr を追加した場合、
ロケールがフランス語の場合は一緒に読み込んで更新します
また、更に地域を指定したい場合はUS/FRなどISO 3166-1-alpha-2
参考2:http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
を確認して下さい。現在の修飾子に追加して指定することになります。
書式は 「rUS, rCA」など地域コード(リージョンコード)の先頭に「r」をつけて下さい。
使い分け
言語コードと地域コードを組み合わせることで、より詳細な指定が可能です。
values-fr- :フランス語指定
values-fr-rCA: カナダ圏かつロケールがフランス語