Androidアプリを国際化する
インターネットの世界は広大です。
開発されたAndroidアプリは、
ネットの力を使うことで全世界の人々が使えるのですから、
自分の作ったアプリを使ってくれる可能性があるユーザーの数は、計り知れません。
とはいえ、日本語のUIでアプリを作ってしまっては、
そのアプリを使えるユーザーは、日本語を使えるユーザーに限定されてしまいます。
Androidアプリを国際化する、なんていう仰々しいタイトルを打っていますが、
要はアプリを多言語対応すればよいのです。
多言語といっても、独語や仏語に対応する必要はなく、
とりあえず英語に対応していれば、(おそらく)何とかなります。
日本ほど、国民が英語にアレルギーを持っている国は、珍しいのではないでしょうか。
(そういう自分も英語苦手ですが…)
多言語対応するには?
Eclipseでプロジェクトを作成した時に勝手にできる、
hello worldをサンプルに話を進めます。
デフォルトの、"Hello world!"は英語として扱い、
これを日本語化することで、二言語対応を実現します。
英語の時は、"Hello world!"、日本語の時は"こんにちは!"と表示されるようにします。
Main Activityで、hello worldを描画しているのは下記の部分です。
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
このファイルは、下記の場所に格納されています。
/res/layout/activity_main.xml
中身をのぞいてみます。
下記のようになっています。
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" />
ここで表示する文字列の参照先となっているファイルは、下記の場所にあります。
/res/values/strings.xml
このxmlファイルに、"hello world"という文字列が格納されていることが確認できます。
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello_world">Hello world!</string> </resources>
では、どのように日本語対応を追加するのでしょうか。
このファイルにある"Hello world!"を"こんにちは!"に書き換えてしまっては、
英語の対応ができません。
Androidでは、OSの言語設定によって、アプリで表示される言語を変える仕組みが用意されています。
OSの言語が日本語なら、アプリで日本語用に用意した文字列が勝手に表示される、という感じです(便利!)
このような状態を作るためには、日本語用のリソースを別に用意し、
OSの言語設定によってどちらを表示させるかを変えればよいのです。
日本語対応を行うには、まず文字列リソースを作成するxmlファイルを作成します。
ここでは、ディレクトリ名が重要です。
/res/values-ja/strings.xml
このように、「values-ja」というディレクトリに、strings.xmlを作成します。
「values-ja」というディレクトリ名は、
日本語対応のルールとして、Androidで定められています
「ja」の部分には、ISO_639-1のコードを指定します。
このファイルに、下記のように記載することで、
OSの言語設定が日本語の場合に、"Hello world!"の部分を、"こんにちは!"と表示してくれるようになります。
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello_world">こんにちは!</string> </resources>
つまりこれは、OSの言語設定が日本語の場合、
勝手に"value-ja"のリソースを使ってくれるということになります。
概念としては下記の図のような感じでしょうか。
各言語において、各表示項目の文字列を設定しておくことで、
OSの言語設定によって読出し先を変え、多言語対応を実現しています。
アプリ動作のためのソースコードを変える必要はないので、
非常にわかりやすい仕組みになっていると思います。