Android は多くの地域の多くのデバイス上で稼働しています。そのほとんどのユーザーにアプローチするには、アプリでテキスト、音声ファイル、数値、通貨、グラフィックを扱う際に、アプリが使用される言語 / 地域(ロケール)での適切な形で扱う必要があります。
このページでは、Android アプリをローカライズするためのベスト プラクティスについて説明します。
ここでは、Kotlin または Java プログラミング 言語の実践的な知識があり、Android リソースの読み込み、 ユーザー インターフェース要素の XML での宣言、アクティビティ ライフサイクルのような開発上の検討事項 、および国際化とローカライズの一般原則について熟知している人を対象としています。
Android リソース フレームワークを利用して、アプリのローカライズされる部分をアプリの機能からできる限り分離することをおすすめします。
- このページとアプリリソースの概要で説明するように、アプリのユーザー インターフェース(UI)のコンテンツのほとんどまたはすべてをリソース ファイルに含めてください。
- 一方、UI の「動作」は、Kotlin ベースまたは Java ベースのコードによって駆動されます。 たとえば、ユーザーが入力するデータをロケールに応じて書式設定したり、並べ替えたりする必要がある場合は、Kotlin または Java プログラミング言語を使用してプログラムでデータを処理します。このページでは、Kotlin ベースと Java ベースのコードのローカライズ方法については説明しません。
アプリの文字列をローカライズする簡潔なガイドとしては、 各種の言語と文化をサポートするをご覧ください。
リソースを使ってローカライズする
このセクションでは、デフォルト リソースと代替リソースの作成方法について説明します。また、リソースに優先度を割り当てる方法と、コードでリソースを参照する方法についても説明します。
デフォルト リソースを作成する
アプリのデフォルト テキストを res/values/strings.xml に含めます。これらの文字列には、デフォルトの言語(アプリのユーザーのほとんどが使用すると想定される言語)を使用します。
デフォルト リソース セットには、デフォルトのドローアブルとレイアウトも含まれます。また、アニメーションなど、他のタイプのリソースも含めることができます。これらのリソースは、次のディレクトリに配置されます。
res/drawable/: Google Play でのアプリのアイコン用に 1 つ以上のグラフィック ファイルを含める必須のディレクトリres/layout/: デフォルト レイアウトを定義する XML ファイルを含める必須のディレクトリres/anim/:res/anim-<qualifiers>フォルダがある場合は必須res/xml/:res/xml-<qualifiers>フォルダがある場合は必須res/raw/:res/raw-<qualifiers>フォルダがある場合は必須
ヒント: コード内で、 Android リソースへの各参照を確認してください。それぞれにデフォルト リソースが定義されていることを確認します。デフォルトの文字列ファイルに漏れがないことも確認してください。ローカライズした 文字列ファイルには文字列のサブセットを含めることができますが、デフォルトの文字列 ファイルにはすべてを含める必要があります。
ローカライズのヒント
アプリをローカライズする際に、以下のヒントを参考にしてください。
柔軟性のあるレイアウトを設計する
特定の言語に合わせてレイアウトを変更する必要がある場合、その言語用に代替レイアウトを作成できます(ドイツ語レイアウト用の res/layout-de/main.xml など)。ただし、これを行うと、アプリの管理が難しくなることがあります。より柔軟な単一のレイアウトを作成することをおすすめします。
もう 1 つの一般的な状況は、レイアウトで異なるものを必要とする言語です。たとえば、連絡先フォームがある場合、日本語でアプリが実行される際は、名前の欄を 2 つ表示しますが、アプリが実行される言語によっては、欄を 3 つ表示する必要があります。これに対処するには、次の 2 つの方法があります。
- 言語に応じてプログラムで有効または無効にできるフィールドを持つレイアウトを 1 つ作成します。
- メインのレイアウトに、変更可能なフィールドがある別のレイアウトを含めます。2 つ目のレイアウトでは言語ごとに異なる構成を用意できます。
Android Context オブジェクトを使ってロケールを手動で検索する
次の例に示すように、Android が提供する Context オブジェクト
を使用してロケールを検索できます。
Kotlin
val primaryLocale: Locale = context.resources.configuration.locales[0] val locale: String = primaryLocale.displayName
Java
Locale primaryLocale = context.getResources().getConfiguration().getLocales().get(0); String locale = primaryLocale.getDisplayName();