Re: 質問:OS上で設定した言語をアプリで取得する方法を教えていただけませんか?

543 views
Skip to first unread message

sumire

unread,
May 22, 2013, 7:57:14 AM5/22/13
to android-g...@googlegroups.com
getResources().getConfiguration().locale.getLanguage()

私の環境ではこのコードでsetDefaultをした後でもOSで設定した言語を取得することができました。
ただしgetDefault()で得られるものとは違う形式で返って来ましたので注意が必要かもしれません。

2013年5月22日水曜日 16時27分06秒 UTC+9 kke...@gmail.com:
過去に自アプリで設定(setDefault)した言語ではなく、
OS上で設定した(設定→言語とキーボード→言語を選択)言語をアプリで取得したいのですが、
教えていただけないでしょうか?
 
自分なりに調べてみたのですが、単にLocale.getDefault()しても、
過去にそのアプリでsetDefaultした言語が取得されるだけで、
OS上で設定した言語を取得できないのですが...
 
ぶしつけな質問で申し訳ないです。

kke...@gmail.com

unread,
May 22, 2013, 9:12:07 AM5/22/13
to android-g...@googlegroups.com
ありがとうございます。
今、手元にSDKが無いため試せませんが、明日、試してみます。
結果を明日報告させていただきます。

kke...@gmail.com

unread,
May 22, 2013, 10:22:19 PM5/22/13
to android-g...@googlegroups.com
試してみました。
結果的にはこちらの実行環境(APIレベル8)では
「getResources().getConfiguration().locale.getLanguage()」と
「getLanguage()」で同じ結果(過去に自アプリがsetDefaultした際の言語を取得する)でした。
試しにプロセスを強制停止してから確認してみるとその際はOS上の言語を取得していました。
その後、setDefaultでアプリ上の言語を変えて、上記命令を行うと、
やはりsetDefaultで変えた後の言語を取得していました。

とりあえずは、どうしてもOS上の言語を取得しなければ困るわけではないのですが、
なんとなく心残りです...

sumire

unread,
May 22, 2013, 11:52:52 PM5/22/13
to android-g...@googlegroups.com
すいません、私の環境を書き忘れていましたね。
投稿前に試したのはAPIレベル16の端末でした。
他も試してみたところ、APIレベル4~17のエミュレーターと
APIレベル8,10,15の端末で「setDefault」をした後でも、OSで設定した言語を取得することができました。

もしかして「getResources().getConfiguration().locale.getDefault().getLanguage()」と書いてしまっていませんか?
これですと「Locale.getDefault().getLanguage()」と同じ結果になってしまいます。

2013年5月23日木曜日 11時22分19秒 UTC+9 kke...@gmail.com:

kke...@gmail.com

unread,
May 23, 2013, 2:33:01 AM5/23/13
to android-g...@googlegroups.com
わざわざ試していただきありがとうございます。

確かに「getResources().getConfiguration().locale.getLanguage()」で試しているのですが、
結果は同じでした。

当方、かなり初心者な者で、「getResources().getConfiguration().locale.getLanguage()」を
記述した箇所(当方では、Activity.classのonCreateに記述)がよろしくない、
もしくは、「setDefault」の方法が良くないのかもしれません。
うまい結果を出せず申し訳ないです...

もう少し遷移を説明すると、下記のとおりです。

1.初めてのビルド&デバッグで、最初のスプラッシュアクティビティーで上記命令を実行
 ⇒OSの言語を取得OK(当方の環境は日本語にしているため、"ja"が取得できます。)

2.同一アプリ内の1.とは別のアクティビティーで「setDefault」(たとえば"en"に変更)

3.同一アプリ内の2.とは別のアクティビティーで上記命令を実行
 ⇒ここで"en"を取得してしまいます。

4.アプリを終了(プロセスは終了してません。)

5.1.と同じ状態で上記命令を実行
 ⇒ここでも"en"を取得します。

6.OS上からプロセスを強制終了

7.1.と同じ状態で上記命令を実行
 ⇒すると"ja"が取得可能

このような遷移です。

お忙しい中、お時間をとっていただきありがとうございました。

kke...@gmail.com

unread,
Jul 11, 2013, 5:01:47 AM7/11/13
to android-g...@googlegroups.com
同じようなことで悩まれている方の為に、年の為、自己レスします。
デバッガで追ってみていると、次のようなことが起っていました。
①プロセス初回起動時
 確かに、「getResources().getConfiguration().locale.getLanguage()」でOS設定の言語が取得できます。
②アプリ内で言語を変更
 「Resources.updateConfiguration(config, null);」でアプリの言語を変更すると、
 監視していた「getResources().getConfiguration().locale.getLanguage()」も変更されている。
③アプリ再開時
 「getResources().getConfiguration().locale.getLanguage()」では②の言語を取得してしまいます。

sumire様よりご教授頂いた方法で記載しても、私の超初心者的プログラミングでは
上記の現象が起きてしまいます。(一向に向上できず申し訳ないです。)

このため、仕方がないので①で取得する先の言語(string)をstaticで宣言しておき、
言語(string)長が0の場合にのみ(プロセス初回起動時のみ)、
「getResources().getConfiguration().locale.getLanguage()」で言語を取得することにしました。
結果的に③で再度OS設定言語を取得しない為、自分の行いたかったことができるようになりました。

あまりスマートな解決方法ではないのですが、念の為記載しておくことにしました。
(sumire様にはお手数をかけてしまい申し訳ないです。)

Makoto Yamazaki

unread,
Jul 11, 2013, 5:32:37 AM7/11/13
to android-g...@googlegroups.com
zaki です。

static 変数に持っておく方法では、アプリが裏にまわってる間に運良くプロセスが
殺されなければアプリ再開時に値を取れますが、プロセスが殺されたけれども
フレームワークによって再構築された場合は初期値に戻ってしまいます。

なので、うまく行くときもあれば行かない時もある感じになると思います。
開発時は沢山のアプリを使ったりしないのでたいてい殺されませんが、実際に
使ってみると結構殺されます。



2013/7/11 <kke...@gmail.com>

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com にメールを送信します。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
 
 



--
YAMAZAKI Makoto

Hiroaki GOTO as GORRY

unread,
Jul 11, 2013, 5:50:17 AM7/11/13
to android-g...@googlegroups.com

後藤 浩昭(GORRY)です。

この問題、遡ると「プロセス構築直後の値を保持したい」ということなので、

・プロセスが残っていればstaticから「最後のプロセス構築直後」の
値が取れる。
・プロセスが死んでいだら「現在がプロセス構築直後」なので
新規にstaticに値を保存するべきタイミングである。

ということで、OKにみえます。


In message <CA+OxMCjfDNPRSs9Fj-=3e4xaagPzyQfW9zVEwr+JS2mDdCZ=k...@mail.gmail.com>
"Re: [android-group-japan: 23524] Re: 質問:OS上で設定した言語をアプリで取得する方法を教えていただけませんか?"
Hiroaki GOTO as "GORRY" : 後藤 浩昭
EMAIL: gorr...@gmail.com

kke...@gmail.com

unread,
Jul 11, 2013, 6:29:00 AM7/11/13
to android-g...@googlegroups.com
言葉足らずですみません。
staticで取得した後でpreferenceに保存します。
OS設定言語を使用したいときはpreferenceを使用します。
staticを使用する理由としては、プロセスが死んでいない状態でactivityのonCreate部が起動された際にresourceから言語を再取得したくないためです。
言葉足らずをフォローして頂きありがとうございます。(そして申し訳ないです。)
Reply all
Reply to author
Forward
0 new messages