多言語に対応する

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

アプリ内で利用する文字列は、直接文字列を書き込む方法と、リソースファイルを参照する方法と2種類あります。基本的にはリソースファイルを参照する方法が推奨されます。

それはなぜかというと、主に多言語対応を簡単に行うためです。そのためにわざわざstrings.xmlへ文字列を書き出します。

Android Studio 0.8.8からTranslation Editorが追加され、この多言語対応が比較的簡単に行えるようになりました。といっても、まだ開発中の機能のため、操作性に難があります(執筆時利用バージョン0.8.9)。エクセルみたいな感じで編集できると便利なんだけどなぁ・・・と使っていて思いました。

具体的にはどうやっているか

ディレクトリ例

 └app
  ├res
   ├values ←デフォルトで利用されるリソース
   ├values-ja ←日本語環境で利用されるリソース
   ├values-en ←英語環境で利用されるリソース
   :

多言語対応ディレクトリ例

こんな感じでディレクトリを作成してそれぞれのリソースファイルを用意します。

日本語環境で利用していれば、values-jaに用意されているstrings.xmlの中身が使用されます。英語環境ならvalues-enのもの、それ以外の環境ならvaluesのものが適用されます。

多言語に対応できるのは何もstrings.xmlだけに限りません。文字を書き込んだ画像の多言語対応のために、drawableを同じように用意してやることもできます。

ソースコードから出力する文字列はどうするのか

ここは私の疑問なんですよね・・・。

とりあえずプログラムで端末のデフォルトロケールを取得して振り分ける処理をしてごまかしました。

if(Locale.getDefault().equals(Locale.JAPAN)){
    //日本語の場合の文字列
}else{
    //それ以外の場合の文字列
}

後から修正が大変になる駄目なパターンだと思いつつ、間に合わせで処理しました。

私がこうやって処理した部分は年月を表示する部分でした。例えば2014年9月と出力する部分です。日本語以外の環境で日本語が出てくるのはおかしいので振り分けてみました。

そもそもソースコードから直接文字列を出力するような実装が間違っているのかもしれません。一番いいのは20149とそれぞれ分割してViewで表示するようにしてやるのがいいのかもしれませんね。

ただそれだけでは対応できないところもあると思うので、ベストプラクティスが何なのか知りたいところです。

ご意見ご感想はこちら

お名前 (必須)

メールアドレス (必須)

メッセージ本文

メッセージを送信するにはチェックを付けてください。