トップページ > 業務内容・ローカライズ > Androidアプリローカライズ手順

Androidアプリのローカライズ手順(ローカライゼーション)

android developersの開発ガイド > Localizationを翻訳したものです。

ローカライゼーション

Androidは多くの地域の、多くの端末上で動きます。 多くのユーザを獲得するためには、text、audioファイル、numbers、currency(通貨)、およびgrahicsを、 アプリケーションが使用されるロケールに合った適当な方法で処理する必要があります。

本ドキュメントでは、Androidアプリケーションのローカライゼーションのための最適な方法について説明載します。 この原則は、アプリケーションの開発に使用しているツール(EclipseのADT、Antベースのツールまたはその他のIDE)に関わらず当てはまります。

読者は既にJavaの実用的な知識があり、Androidのリソース読み込み、XMLでのUI要素の宣言、 アクティビティ・ライフサイクルなどの開発する上での配慮、 かつ国際化やローカライゼーションの一般原則に精通していることを前提としています。

Androidリソースフレームワークを用いて、 可能な限りコアなJavaの機能からアプリケーションのローカライズされた部分を分離するのが標準的な方法と言えます。

  • 本ドキュメントと Providing Resources にあるように、 アプリケーションのUIコンテンツの全てまたはほとんどを、リソースファイルに配置することが可能です。
  • 一方で、UIの動作はJavaコードによって動きます。 例えば、もしユーザがロケールによってフォーマットやソートが異なる必要のあるデータを入力した場合、 それらのデータをプログラムで処理するためにはJavaを使用します。 このドキュメントでは、Javaコードをローカライズする方法については記載しません。

本ドキュメントに記載されている、ローカル固有のリソースを使用したシンプルなローカライズアプリケーションを生成するステップを、 「Hello, L10N」 チュートリアルで実践できます。

ページトップへ戻る

要約:Androidにおけるリソース切り替え

リソースとは、アプリケーションに必要なstrings、layouts、sounds、graphics、およびその他の静的なデータです。 一つのアプリケーションに複数のリソースセットを含めることが可能で、それぞれのリソースセットは異なる端末設定に合わせてカスタマイズされます。 ユーザがアプリケーションを使用する際、Androidは自動で端末に最もマッチするリソースを選択し、ロードします。

( 本ドキュメントはローカライゼーションとロケールにフォーカスします。 リソース切り替えに関する詳しい説明および、指定可能な全てのタイプの設定 画面の向き、タッチスクリーン・タイプなどについては、 Providing Alternative Resources を参照してください。 )

アプリケーションを作る時:

デフォルトのリソースセットを作成し、加えて異なるロケールで使用される代替のリソースセットを作る
ユーザがアプリケーションを使う時:

Androidシステムが端末のロケールに基づいて、ロードするリソースを選択する。

アプリケーションを作る時は、あなたの作成するアプリケーションが使用するデフォルトのリソースと、代替のリソースを作成します。 リソースを生成するには、プロジェクトの res/ ディレクトリの、特別に名前を付けたサブディレクトリ内にファイルを配置します。


なぜデフォルトリソースが重要なのか

ロケール固有のテキストを指定していないロケールにおいてアプリケーションを起動した場合、 Androidは res/values/strings.xmlからデフォルトの文字列をロードします。 もし、デフォルトのリソースファイルがない、または、アプリケーションに必要な文字列が欠落している場合、 アプリケーションは起動せずにエラーを表示します。
下記の例ではデフォルトファイルが不完全だった場合に起こる事象を解説します。

Example:

アプリケーションのJavaコードが「text_a」と「text_b」の二つの文字列のみを参照しています。 このアプリケーションには「text_a」と「text_b」を英語で定義し、 ローカライズしたリソースファイル ( resvalues-en/strings.xml ) が含まれています。 また、「 text_a」の定義を含み「 text_b」の定義を含まないデフォルトのリソースファイル ( res/values/strings.xml ) も含まれています:

  • このアプリケーションは問題なくコンパイルされると考えられます。 EclipseなどのIDEはリソースが欠落していてもエラーをハイライト表示しません。
  • このアプリケーションを、ロケールが英語にセットされている端末で起動した場合、 アプリケーションは、res/values-en/strings.xmlに必要な両方の文字列が含まれているため、 問題なく動くと考えられます。
  • しかしながら、このアプリケーションがEnglish以外の言語にセットされている端末で起動された場合は、 ユーザにエラーメッセージと強制終了ボタンが表示されます。アプリケーションはロードしません。

このシチュエーションを回避するために、res/values/strings.xmlファイルが存在し、 そのファイルに必要な全ての文字列が定義されていることを確認してください。このシチュエーションはstringsのみでなく、 全てのタイプのリソースファイルに当てはまります:あなたのアプリケーションに必要な全てのリソース ( layouts, drawables, animations,他 ) を含む デフォルトのリソースファイルセットを生成する必要があります。 テストに関する情報は、Testing for Default Resourcesを参照してください。

ページトップへ戻る

ローカライゼーションのためにリソースを使用する

デフォルトリソースを生成する方法

アプリケーションのデフォルトテキストを、下記のパスおよび名前のファイルに配置する。

  • res/values/strings.xml ( 必須ディレクトリ )

res/values/strings.xml内のテキスト文字列にはデフォルトの言語が使われている必要があり、 それはあなたのアプリケーションを使用するユーザの大多数が話すと考えられる言語になります。

デフォルトのリソースは、デフォルトのdrawablesおよびlayoutsも含む必要があり、animationなどその他のタイプのリソースを含めることも可能です。

  • res/drawable/( Google Playに載せるアプリアイコンで使用するための最低一つの画像ファイルを含む必須のディレクトリ )
  • res/layout/ ( デフォルトレイアウトを定義するXMLファイルを有する必須のディレクトリ )
  • res/anim/ ( res/anim-<限定詞>フォルダがある場合に必要 )
  • res/xml/ ( res/xml-<限定詞>フォルダがある場合に必要 )
  • res/raw/ ( res/raw-<限定詞>フォルダがある場合に必要 )
Tip: 作成したコードでそれぞれのAndroidリソースへの参照を試します。 それぞれにデフォルトリソースが定義されていることを確認してください。 また、デフォルトの文字列ファイルに不足がないことを確認します: ローカライズされた文字列ファイルに文字列のサブセットを含めることができますが、 デフォルトの文字列ファイルにはそれら全てが含まれている必要があります。

代替のリソースファイルを作成する方法

アプリケーションのローカライズのほとんどのパートは、異なる言語用の代替テキストを準備することです。 場合によっては、代替のgraphicsやsounds、layouts、そのたのロケール固有のリソースを準備します。

一つのアプリケーションでそれぞれ異なる限定詞を持つ多数のres/<限定詞>/ディレクトリを指定することができます。 異なるロケールの代替リソースを生成するには、言語または言語と地域のコンビネーションを指定する限定詞を使用します。 ( リソースディレクトリの名前は Providing Alternative Resources に記載されている命名スキームに従う必要があり、反する場合はコンパイルできません。 )

Example:

あなたのアプリケーションのデフォルト言語は英語だとします。 そして、アプリケーションの全てのテキストをフランス語にローカライズし、ほとんどのテキスト(アプリのタイトル以外全て)を日本語にローカライズするとします。 この場合、3つの代替strings.xmlファイルを作成し、それぞれロケール固有のリソースディレクトリに保存します:

  • 1. res/values/strings.xml:
    タイトル文字列を含んだアプリケーションが使用する全ての文字列の英語テキストを含む。
  • 2. res/values-fr/strings.xml:
    タイトルを含んだすべてのフランス語の文字列を含む。
  • 3. res/values-ja/strings.xml:
    タイトル以外の全ての文字列の日本語テキストを含む。

あなたのJavaコードがR.string.titleを参照した場合、ランタイムの動作は下記の通りです:

  • 端末がフランス語以外の言語にセットされている場合、Androidはタイトルをres/values/strings.xml fileファイルからロードします。
  • 端末がフランス語にセットされている場合、Androidはタイトルをres/values-fr/strings.xmlからロードします。

端末が日本語にセットされている場合、Androidはres/values-ja/strings.xmlにタイトルを探しに行きます。 しかし、そのファイルにはそのような文字列が含まれていないため、Androidはデフォルトに戻り、 res/values/strings.xmlファイルから英語のタイトルをロードします。


どのリソースが優先されるのか?

もし複数のリソースが端末の設定と合致した場合、Androidはどのファイルを使用するかを定めたルールセットに従います。 リソースディレクトリ名に指定された限定詞のうち、ほぼ毎回ロケールが優先されます。

Example:

アプリケーションにデフォルトのgraphicsセットと、その他2つのgraphicsセットが含まれ、それぞれ、異なる端末設定に最適化されていると仮定します:

  • res/drawable/
    デフォルトのgraphicsを含む。
  • res/drawable-small-land-stylus/
    stylusからの入力が予想され、ランドスケープ方向のQVGA低密度スクリーンを有する端末での使用に最適化されたgraphicsを含む。
  • res/drawable-ja/
    日本語での使用に最適化されたgraphicsを含む。

もし日本語を使うように設定された端末でアプリケーションが動作する場合、stylusからの入力が予想され、 ランドスケープ方向のQVGA低密度スクリーンを有する端末だとしても、Androidはgraphicsをres/drawable-ja/からロードします。

例外: 選択プロセスにおいてロケールより優先される唯一の限定詞はMMC( mobile country code )およびMNC ( mobile network code ) です。

Example:

下記の状況が発生したとします。

  • アプリケーションコードがR.string.text_aを使おうとしています。
  • 2つの関連するリソースファイルが利用可能です。
    • res/values-mcc404/strings.xml, - アプリケーションのデフォルト言語 ( このケースでは英語 ) でtext_aが含まれる。
    • res/values-hi/strings.xml- ヒンディー語でtext_aが含まれる。
  • アプリケーションは下記設定の端末で動作している。
    • SIMカードはインド ( MCC 404 ) でモバイルネットワークに接続されている。
    • 言語はヒンディー語 ( hi ) にセットされている。

Androidは、端末の設定がヒンディー語になっていたとしても、 text_ares/values-mcc404/strings.xml ( 英語 ) からロードします。 Androidは言語の合致よりMCCの合致を選びます。

選択プロセスは、これらの例が示すほど単純な場合ばかりではありません。 このプロセスのより繊細な説明については、 How Android Finds the Best-matching Resourceを読んでください。
Providing Alternative Resources の表2に全ての限定詞について記載され、優先順に並べられています。


Javaでリソースを参照する

アプリケーションのJavaコードでは、R.resource_type.resource_nameまたは、 android.R.resource_type.resource_nameの構文を用いてリソースを参照します。 構文に関する情報はAccessing Resourcesを参照してください。

ページトップへ戻る

ローカライゼーション・ストラテジー

どんなロケールでも動作するようにアプリケーションを設計する。

ユーザがあなたのアプリケーションを使用する端末について、全てを想定することは不可能です。 端末のハードウェアはあなたが想定していなかったものかもしれません。 もしくは、あなたが計画していなかったり、テストできなかったロケールに設定されている端末が使用されるかもしれません。 どのような端末が使われても、正しく機能するまたは、失敗しても正しくエラー処理されるように設計します。

重要:アプリケーションに完全なデフォルトリソースセットが含まれていることを確認してください。

アプリケーションが必要とする全てのイメージとテキストを含む res/drawable/およびres/values/ フォルダ ( フォルダ名には修飾語句を追加しない ) を必ず含んでください。
もし、アプリケーションにデフォルトリソースが一つでも欠落している場合、サポートしていないロケールにセットされた端末では動作しません。

例えば、res/values/strings.xml デフォルトファイルがアプリケーションに必要な文字列のうち、一つの文字列を欠いていたとします。 サポートされていないロケールでアプリケーションが起動され、 res/values/strings.xmlをロードしようと試みた場合、エラーメッセージと強制終了ボタンが表示されます。 EclipseなどのIDEはこの種のエラーをハイライト表示せず、サポートされたロケールにセットされた端末や、 エミュレータでアプリケーションをテストした場合もこの問題を目にすることはありません。

より詳細な情報は、 Testing for Default Resources を参照してください。


柔軟なレイアウトを設計する。

特定の言語に合わせレイアウトを再アレンジする必要がある場合 ( 例えば長い単語が存在するドイツ語など )、 その言語用の代替レイアウトを生成することが可能です ( 例:res/layout-de/main.xml )。
しかしながら、これらを実施することによりアプリケーションのメンテナンスが大変になります。 より柔軟なひとつのレイアウトを作成することがより好ましいです。

もうひとつの典型的なシチュエーションは、異なるレイアウトが必要になる言語です。 例えば、アプリケーションを日本語で動かす際の問合せフォームには、名前の入力欄を二つ含める必要がありますが、 他の言語の場合は3つ必要になります。
これは2つの方法のうちいずれかの方法で対処することができます。

  • 言語に基づいてブログラムで有効/無効を切り替えられるフィールドを有した一つのレイアウトを作成する。または
  • メインレイアウトに変更可能なフィールドを含む別のレイアウトを含める。2つめのレイアウトは異なる言語に合わせた異なる設定が可能です。

必要以上のリソースファイルやテキスト文字列を作成しない。

アプリケーションの全てのリソースに関して、ロケール固有の代替を生成する必要はないかもしれません。 たとえば、res/layout/main.xmlファイルに定義されたレイアウトが全てのロケールで動作することもあり、 その場合は他の代替レイアウトファイルを作成する必要はありません。

また、全ての文字列について代替テキストを作成する必要がない場合があります。 例えば、下記の場合を想定してください。

  • あなたのアプリケーションのデフォルト言語はアメリカ英語です。 アプリケーションで使用する全ての文字列がアメリカ英語のスペリングで res/values/strings.xmlに定義されています。
  • あなたは重要なフレーズに関しては、イギリス英語のスペルを提供したいと考えています。 アプリケーションがU.K.の端末で動作する場合には、これらの代替文字列を使用したいと思っています。

これを実現する為には、アプリケーションがU.K.で起動される場合に異なるべき文字列のみを含む res/values-en-rGB/strings.xmlという小さなファイルを作成します。 その他の全ての文字列については、アプリケーションはデフォルトに戻り、 res/values/strings.xmlに定義された文字列を使用します。


手動でのロケール参照にAndroid Contextオブジェクトを使用する。

Androidが公開しているContextオブジェクトを使用して、 ロケールを参照することが可能です。

String locale = context.getResources().getConfiguration().locale.getDisplayName();
ページトップへ戻る

ローカライズされたアプリケーションテスト

端末でのテスト

あなたがテストに使用する端末は、異なる地域のユーザが使用する端末とは大きくことなる可能性があるというこに留意してください。 あなたの端末で選択可能なロケールが他の端末で選択可能なロケールと異なることがあります。 また、端末の画面の解像度と密度も異なる可能性があり、UIの文字列とDrawableの表示に影響することがあります。

端末のロケールを変更するには、設定アプリケーション ( Home > メニュー > 設定 > 地域と言語 > 地域を選択 ) を使用します。


エミュレータでのテスト

Fエミュレータの詳細については Android Emulator を参照してください。


カスタムロケールの作成と使用

“カスタム”ロケールは、Androidシステムイメージが明示的にサポートしていない言語/地域の組み合わせです。 ( Androidプラットフォームでサポートしているロケールの一覧については、 SDKタブのVersion Notesを参照してください。 ) エミュレータにカスタムロケールを作成することにより、カスタムロケールにおいてあなたのアプリケーションがどのように動くかテストすることができます。
これには2つの方法があります。

  • Applicationタブから行けるCustom Localeアプリケーションを使用してください。 ( カスタムロケールを作成した後、ロケール名を押下、ホールドし切り替えます。 )
  • 下記手順で、adbシェルからカスタムロケールに変更します。

エミュレータをAndroidシステムイメージで使用不可能なロケールに設定した場合、システム自体はそのデフォルト言語で表示します。 しかし、アプリケーションは正しくローカライズされます。


adbシェルからエミュレータのロケールを変更する。

abdシェルを使用してエミュレータのロケールを変更するには、

  • 1. テストしたいロケールを選び、言語と地域コードを決定します。
    ( 例:フランス語はfr、カナダはCA )
  • 2. エミュレータを起動します。
  • 3. ホストPCのコマンドラインから、下記のコマンドを実行します:
    adb shell
    または、付随する端末がある場合、-eオプションを付けエミュレータへの接続を指定します:
    adb -e shell
  • 4. adb shellのプロンプト(#)で下記のコマンドを実行します:
    setprop persist.sys.language [言語コード];setprop persist.sys.country [国コード];stop;sleep 5;start
    Step1から括弧内を適当なコードで入れ替えます。

例えば、カナディアンフレンチをテストするには:

setprop persist.sys.language fr;setprop persist.sys.country CA;stop;sleep 5;start

上記を実行すると、エミュレータは再起動します。 ( フルリブートのように見えますが、違います ) ホーム画面が表示された後、アプリケーションを再起動すると ( 例:Eclipseの実行アイコンをクリックする )、 アプリケーションは新しいロケールで起動します。

デフォルトのリソースをテストする。

アプリケーションに必要な全ての文字列リソースを含んでいるかどうかテストする方法を下に示します。

  • 1. エミュレータまたは端末をあなたのアプリケーションがサポートしていない言語にセットします。 例えば、アプリケーションに、フランス語の文字列 ( res/values-fr/ ) があり、 スペイン語の文字列 ( res/values-es/ ) がない場合は、エミュレータのロケールをSpanishに設定します。 ( カスタムロケールアプリケーションを使用してエミュレータをサポートしていないロケールに設定することもできます。 )
  • 2. アプリケーションを実行します。
  • 3. もし、アプリケーションにエラーメッセージと強制終了ボタンが表示された場合、使用不可な文字列を探していると考えられます。 res/values/strings.xmlファイルにアプリケーションで使用する全ての文字列の定義が含まれていることを確認してください。

テストに成功したら、別のタイプの設定でテストを繰り返してください。 例えば、アプリケーションにres/layout-land/main.xmlファイルがあり、 res/layout-port/main.xmlファイルがない場合は、 エミュレータまたは端末をポートレート方向に設定しアプリケーションの動作を確認してください。

ページトップへ戻る

ローカライズされたチェックリスト

このチェックリストではAndroidアプリケーションのローカライズの手順を要約しています。 このリストの全てが、全てのアプリケーションに当てはまるわけではありません。

計画および設計のチェックリスト

ロケーションストラテジーを選択します。あなたのアプリケーションがサポートする国と言語はなんですか? あなたのアプリケーションのデフォルトの国と言語は何ですか?特定のロケールに有効な固有のリソースがなかった場合、あなたのアプリケーションはどのように動作しますか?
あなたのアプリケーションでローカライズする必要のあるもの全てを洗い出す。
  • あなたのアプリケーションの具体的な詳細を検討します-テキスト、画像、音、音楽、数字、お金、日付、時間。 全てをローカライズする必要はない可能性があります。 例えば、ユーザーの目に触れないテキストや文化的にニュートラルな画像、 または全てのロケールにおいて同様の意味を示すアイコンなどをローカライズする必要はありません。
  • 広いテーマを検討します。 例えば、もしあなたのアプリケーションを文化的に全く異なる二つのマーケットで販売したいと考えている場合、 それぞれのロケールに併せた大きく異なる方法でUIをデザインし、アプリケーションを紹介する必要があると考えられます。
Javaコードを設計し、可能な限りリソースを外出しする。
  • 決め打ちの文字列や、文字列コンスタントの代わりに R.stringやstrings.xml を使用してください。
  • 決め打ちのdrawablesやlayoutsの代わりに R.drawableR.layout を使用してください。

コンテンツのチェックリスト

Creating Default Resources にあるように、res/values/や他のres/ フォルダに完全なデフォルトリソースのセットを作成します。
メニュー、ボタン名、エラーメッセージおよびヘルプを含む静的なテキストの信頼できる翻訳を入手します。 翻訳された文字列をres/values-<限定詞>/strings.xmlファイルに配置します。
アプリケーションが動的なテキスト(数字や日付など)をサポートされたロケールそれぞれについて正しくフォーマットされることを確認します。 サポートしている全てのロケールについて、アプリケーションが改行や、句読点、アルファベット順のソートなどを正しく処理していることを確認してください。
必要に応じてgraphicsやlayoutsのロケール固有のバージョンを作成し、 res/drawable-<限定詞>/およびres/layout-<限定詞>/フォルダに配置します。
あなたのアプリケーションに必要なその他のローカライズコンテンツを作成します。 例えば、必要に応じてそれぞれの言語で録音されたsoundファイルを作成します。

テストおよび公開時のチェックリスト

アプリケーションをサポートするそれぞれのロケールでテストします。 可能であれば、アプリケーションをテストするロケールのネイティブの人間に依頼し、フィードバックをもらいます。
端末またはエミュレータで使用不可なロケールを読み込み、デフォルトリソースをテストします。 説明は、 Testing for Default Resources を参照してください。
ローカライズされた文字列をランドスケープとポートレイト両方のディスプレイモードでテストします。
アプリケーションにサインし、最終的なビルド(buildまたはbuilds)を生成します。
.apsファイルをGoogle Playにアップロードします (アップロード時に適切な言語を選択します ) ( 詳細については、 Publishing Your Applications を参照してください。)
ページトップへ戻る

このページの内容の一部は、Android オープンソースプロジェクトが作成、提供しているコンテンツをベースに変更したもので、クリエイティブ・コモンズの表示 3.0 ライセンスに記載の条件に従って使用しています。

メインメニュー

Copyright (c) 2012 Fides Medium. All rights reserved.