追記:この記事では、どのstrings.xmlが読み込まれるかでロケールを判別していますが、JavaのLocaleを使って取得できますし、そちらの方が標準的かと思います。(2010/11/21)
-----
先日仕事の一環で Android アプリケーションを作成し、日本語から英語にローカライズしました。
本日(09/10/10)段階ではまだリリースしていないので、残念ながら詳しい機能は書けません。
今回は、日本語、英語(一般)、英語(アメリカ)の 3 つのロケールで表示と機能が変わるようにプログラムしました。
ロケール設定自体は Android 端末本体が記憶していて、アプリケーションの実行時にそれを読み込み、表示と機能を切り換えるという仕組みです。
[これ以下の話は、記事「アプリを国際化してAndroid Marketから世界へ発信」程度の予備知識を前提にしています]
具体的にはそれぞれのロケールについて、文字列を格納しておく XML(strings.xml)にそのロケールを表す文字を入れておきます。
今回私は「en」、「en-rUS」、「ja」などとしたのですが、(if 文や switch 文などで)区別が付けばいいだけなので、別の文字でも数字でも大丈夫かと思います。
Eclipse を使った場合のフォルダ構成と、キー・値は以下のような感じです。
このように strings.xml にロケールを示す文字を入れておき、onCreate() 実行時にその文字を読み込むようにします。
それを適当な変数に格納します。
これで、Android 携帯端末本体に設定したロケールを読み込み、アプリケーションで指定できます。
これが便利なのは、表示だけではなく機能までロケールごとに変更できる点です。
例えば if 文で変数の中身が "ja" だったら、「メートル」や「キログラム」で計算し、"us" だったら「インチ」や「ポンド」で計算するといったことができます。
今回私は strings.xml に入れましたが、もうちょっとスマートな方法があるかもしれません。
この程度の方法なら誰でも考え付くだろうと思っていたら、Android Market にわざわざロケール別のアプリを出している人がいました。
あまりに単純なのでわざわざブログ記事にするものどうかと思いましたが、せっかくなのでメモ程度に残すことにしました。
-----
先日仕事の一環で Android アプリケーションを作成し、日本語から英語にローカライズしました。
本日(09/10/10)段階ではまだリリースしていないので、残念ながら詳しい機能は書けません。
今回は、日本語、英語(一般)、英語(アメリカ)の 3 つのロケールで表示と機能が変わるようにプログラムしました。
ロケール設定自体は Android 端末本体が記憶していて、アプリケーションの実行時にそれを読み込み、表示と機能を切り換えるという仕組みです。
[これ以下の話は、記事「アプリを国際化してAndroid Marketから世界へ発信」程度の予備知識を前提にしています]
具体的にはそれぞれのロケールについて、文字列を格納しておく XML(strings.xml)にそのロケールを表す文字を入れておきます。
今回私は「en」、「en-rUS」、「ja」などとしたのですが、(if 文や switch 文などで)区別が付けばいいだけなので、別の文字でも数字でも大丈夫かと思います。
Eclipse を使った場合のフォルダ構成と、キー・値は以下のような感じです。
このように strings.xml にロケールを示す文字を入れておき、onCreate() 実行時にその文字を読み込むようにします。
それを適当な変数に格納します。
これで、Android 携帯端末本体に設定したロケールを読み込み、アプリケーションで指定できます。
これが便利なのは、表示だけではなく機能までロケールごとに変更できる点です。
例えば if 文で変数の中身が "ja" だったら、「メートル」や「キログラム」で計算し、"us" だったら「インチ」や「ポンド」で計算するといったことができます。
今回私は strings.xml に入れましたが、もうちょっとスマートな方法があるかもしれません。
この程度の方法なら誰でも考え付くだろうと思っていたら、Android Market にわざわざロケール別のアプリを出している人がいました。
あまりに単純なのでわざわざブログ記事にするものどうかと思いましたが、せっかくなのでメモ程度に残すことにしました。