前回のメモで、Activityに表示する文字列をstrings.xmlに定義しておくと、Android StudioのエディタでXMLファイルやJavaファイルを開くと、紐付いた要素が置き換わって表示されると書きました。この仕組みを使って、あらかじめ言語別にstrings.xmlを用意しておくと、使う端末の言語を判定して自動的にアプリの文字列を切り替えること(テキストローカライズ)が可能になります。
将来インターナショナルなアプリを作ることになるかもしれないので、メモっておきます。
ローカライズの基本
テキストローカライズの方法は、res/values/strings.xml に標準の文字列(国際的には英語)を記述しておき、あとは必要な言語ごとに下記フォルダ構成でstrings.xmlを用意します。
res/values-[言語コード]/strings.xml
※言語コードは、ISO 639-1の2文字を適用
具体的には、こんな感じのフォルダ構成とstrings.xmlの記述になります。
res/values/strings.xml に標準の文字列(国際的には英語)
<resources>
<string name="app_name">AndroidSerif</string>
<string name="action_serif">I'll be back!</string>
</resources>
res/values-ja/strings.xml に日本語文字列
<resources>
<string name="app_name">アンドロイドの台詞</string>
<string name="action_serif">戻ってきます!</string>
</resources>
国名での分類も含めたローカライズ
アメリカ英語とイギリス英語など、国によって違いがある場合は、さらに国名での分類を追加して、下記のようなフォルダ構成でstrings.xmlを用意します。
res/values-[言語コード]-r[国名コード]/strings.xml
※国名コードはISO 3166-1 alpha-2の2文字を適用
具体的なフォルダ構成は、こんな感じになります。
res/values-en-rUS/strings.xml - アメリカ英語
res/values-en-rGB/strings.xml - イギリス英語
また、中国語の場合、字体の違いで繁體字と簡体字を区別しています。
Android端末の言語設定で下記のような表記がありますが
中文(繁體)
中文(簡体)
中文(香港地区)
これに合わせて、言語別のstrings.xmlを用意する場合、国名コードで使い分けているようです。
台湾 - 繁體
香港 - 繁體
マカオ - 繁體
中国本土 - 簡体
シンガポール - 簡体
例えば、以下のフォルダ構成で言語ごとのstrings.xmlファイルを用意します。
res/values/strings.xml - 英語
res/values-ja/strings.xml - 日本語
res/values-zh/strings.xml - 中国語(簡体)
res/values-zh-rTW/strings.xml - 中国語:台湾(繁體)
res/values-zh-rHK/strings.xml - 中国語:香港(繁體)
res/values-zh-rMO/strings.xml - 中国語:マカオ(繁體)
res/values-zh-rSG/strings.xml - 中国語:シンガポール(簡体)
※Androidビューにすると各国の国旗が小さく表示されています。
この状態で、Androidの設定が中文(香港地区)の場合、優先されるテキスト文字列は、下記の順番になります。
- res/values-zh-rHK/strings.xml - 中国語:香港(繁體)
- res/values-zh/strings.xml - 中国語(簡体)
- res/values/strings.xml - 英語
より上位のstrings.xmlから文字列を参照して、該当文字列が定義されていない場合は、下位のstrings.xmlを参照します
コメント
コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)