言語設定を取得
Android 端末では
言語設定を行うことができる。
日本語表記
更に、Android アプリケーションでは多言語対応も可能。
アプリの多言語対応
ということは、端末の言語設定を取得する必要も出てくる。
手法が2つあるようだ。
Locale クラスの getDefault メソッドを利用する手法。
Locale.CANADA | en_CA |
---|---|
Locale.CANADA_FRENCH | fr_CA |
Locale.CHINA | zh_CN |
Locale.CHINESE | zh |
Locale.ENGLISH | en |
Locale.FRANCE | fr_FR |
Locale.FRENCH | fr |
Locale.GERMAN | de |
Locale.GERMANY | de_DE |
Locale.ITALIAN | it |
Locale.ITALY | it_IT |
Locale.JAPAN | ja_JP |
Locale.JAPANESE | ja |
Locale.KOREA | ko_KR |
Locale.KOREAN | ko |
Locale.PRC | zh_CN |
Locale.ROOT | the root locale |
Locale.SIMPLIFIED_CHINESE | zh_CN |
Locale.TAIWAN | zh_TW |
Locale.TRADITIONAL_CHINESE | zh_TW |
Locale.UK | en_GB |
Locale.US | en_US |
以下のように toString メソッドを用いて文字列として取得できる。
[android]String myLocale = Locale.getDefault().toString();
if (myLocale == “ja_JP”) {
// ゴニョゴニョ
}[/android]
ところが! この if 文はスルーされる・・・なぜ? 🙄
いつの日か解決する日を夢見て・・・zzz
※2011-06-03 いただいたコメントにより解決。詳細は次の項にて。
参考サイトで紹介されていた以下の手法はちゃんと機能した。
[android]if ( Locale.JAPAN.equals(Locale.getDefault() ) {
// 日本語の処理
} else {
// 日本語以外の処理
}[/android]
getResources().getConfiguration().locale.getLanguage() を利用する手法。
[android]String myLocale = getResources().getConfiguration().locale.getLanguage();
if (myLocale == “ja”) {
// ゴニョゴニョ
}[/android]
これは toString なしでも文字列変数に代入できるし
デバッグの変数内容を見ると ja になっているのに
やっぱり上記 if 文が機能しない。 🙄
な~ぜ~だろ~なぜだろ~。
Java では、比較演算子 == は
- プリミティブ型 – 値を比較してくれる
- オブジェクト型 – 型を比較する(同じ型か否か)
ので、オブジェクト型で値を比較したいときは equals を利用すべし。
参考サイト:日本アンドロイドの会 設定言語の取得について
if (myLocale.equals(“ja”))
{
:
:
}
だからでは?
Stringの == 演算子は同一オブジェクト化か否かだから、同一オブジェクトとはみなされてないだけでは?
ひかりんパパ。さん、はじめまして。
コメントをありがとうございます。
いただいたコメントを元にグーグル先生に質問したところ
理解できました。
このような基本的な事項に、
わざわざコメントしていただき
感謝します。
お蔭様にて、また一歩前進しました。