多言語に対応する
アプリ内で利用する文字列は、直接文字列を書き込む方法と、リソースファイルを参照する方法と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月
と出力する部分です。日本語以外の環境で日本語が出てくるのはおかしいので振り分けてみました。
そもそもソースコードから直接文字列を出力するような実装が間違っているのかもしれません。一番いいのは2014
と年
と9
と月
とそれぞれ分割してViewで表示するようにしてやるのがいいのかもしれませんね。
ただそれだけでは対応できないところもあると思うので、ベストプラクティスが何なのか知りたいところです。