さまざまなリソース切り替え設定

2010年5月20日(木)
有山 圭二(ありやま けいじ)

言語と地域の設定で表示を切り替える(ローカライズ)

前回は、端末の解像度や画面の向きに応じて自動的にアプリのレイアウトを切り替えるための方法として、修飾子の異なるリソースを複数用意するやり方を解説しました。

今回は、画面レイアウト以外のリソースの切り替えについて解説します。

最初に、ユーザーの利用する言語や、地域に応じて表示する文字列を切り替えましょう。

ご存じのように、Androidのアプリ配信サービス「Android Market」を使えば、世界中のAndroidユーザーに対してアプリを配信できます。われわれは日本語を読み、理解しますが、世界では日本語以外の言語がたくさん使われています。

Android Marketで配信されているアプリの中には、日本語に対応していないアプリもあります。われわれがそれらを「使いにくい」と感じるように、日本語にしか対応していないアプリは、海外のユーザーから見ると「使いにくい」のです。

この問題を解決するには、ユーザーの使用する言語に応じて表示を調整(ローカライズ)する必要があります。

Androidでは、このローカライズも、リソース・マネージャを使って自動化できます。

手法を解説するためのサンプルを用意したので、こちらからダウンロードしてください。ファイルはzipで圧縮してあり、展開するとEclipseのプロジェクトになります。Androidの開発プラグインをインストールしたEclipseにインポートしてください。

サンプル「ResourceTest2」プロジェクトのsrc以下は、コードを格納しているディレクトリです。また、res以下が、リソースを格納しているディレクトリです。

res_sample以下は、筆者が作成したディレクトリで、本来Android開発には必要ありません。今回、説明に使うリソースのサンプルが納められています。

サンプルを実行すると、画面に「Hello World, MainActivity」と文字列が表示されます(図1-1)。

言語・地域によるリソースの変更

それでは、英語で表示されているHello Worldの文字列を、ユーザーの使用する言語が日本語の場合には日本語で表示するように変更しましょう。

前回説明したとおり、表示する画面(レイアウト)は、リソース「res/layout/」のmain.xmlで定義しています。

このmain.xmlにはTextViewが1つ含まれ、表示する内容はandroid:text属性で指定しています。

ここで指定されている「@string/hello」は、これ自身が文字列ではなく、文字列リソースを参照すると言う意味です。

コードとリソースの分離と同じく、画面に表示する部品の構成と、表示する内容文字列もまた分離して、別に定義するのです。

文字列リソースの内容は、「res/values/strings.xml」で定義しています。

	<code>
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, MainActivity!</string>
    <string name="app_name">ResourceTest2</string>
    <string name="execute">Execute</string>
</resources>
</code>




この「res/values/strings.xml」の内容を変更すれば、表示文字列を変更できます。しかし、ここを直接日本語に変更すると、常に日本語として表示されてしまうので、複数言語に対応できません。

新しく日本語のリソースを追加するには、「res」ディレクトリに、「values-ja」ディレクトリを新規作成します。

このハイフン以下の「ja」が、リソースの修飾子であり、日本語環境に向けたリソースであることを示します。

サンプル・プロジェクトの「res_sample/values-ja」のstrings.xmlを、作成したvalues-jaディレクトリにコピーしてください。

values-ja/strings.xmlは、values/strings.xmlと構成は同じですが、に囲まれた文字列が違います。

	<code>
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">はろーわーるど, めいんあくてぃびてぃ!</string>
    <string name="app_name">リソーステスト2</string>
    <string name="execute">実行</string>
</resources>
</code>




「values-ja/strings.xml」を追加した後、サンプルを実行してください。エミュレータの画面に表示される文字列は、変わらず「Hello World, MainActivity」となっています。これは、エミュレータの設定が、日本語に設定されていないためです。

テストのために、一度サンプル・アプリを終了して、エミュレータのホーム画面に戻ります。

図1-2のように、メニューから「Custom Locale」を実行して、表示された一覧の中から「ja」もしくは「ja_JP」を設定します(設定には、列を長押しして表示されるメニューで「apply」を選択します)。

設定後、サンプル・アプリを実行すると、「values-ja」として追加したリソースの文字列が表示されます(図1-3)。

もう一度「en」もしくは「en_US」に設定すると、表示文字列が元に戻る事を確認してください。

次のページでは、Xperiaのようなトラックボールの無い端末向けの対処について解説します。

著者
有山 圭二(ありやま けいじ)

有限会社シーリス代表。日本Androidの会 運営委員。手間暇かけてくだらないことをするのが大好きで、2007年11月にAndroidの発表を知り「All applications are created equal」の言葉に惹かれて参入。代表的な開発アプリは「MoreLocale 2」、「近藤昭雄シリーズ(憂鬱・退屈)」、「薬検索」など。twitter ID: keiji_ariyama

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています