閉じる

Androidにおいて特定ロケールテキストリソースの取得

要は「java.text.DateFormat.getDateInstance(java.text.DateFormat.MEDIUM,Locale.JAPAN)」のテキスト版みたいな事がやりたかったわけだ。

散々調べ廻ったけど、現在言語指定を切り替える方法はあれど、getString(int ID,Locale local)みたいな代物は見あたらない。

無理矢理↓みたいなコードも書いてみた。

2826-0.java
Configuration c = new Configuration();
c.locale = Locale.JAPAN;
Resources r = new Resources(Resources_.getAssets(),new DisplayMetrics(), c);
r.getString(R.string.hoge);

確かに Locale.JAPANなテキストは取得できたけど…元のコンテキストの言語設定まで書き換わる…_no

なんとかならんかとソースを追っていったら…AssetManager.setLocaleというネイティブメソッドまでたどり着いた。

AssetManagerのインスタンスを作って setLocaleを呼べば目的は達成できそう。

でもね、AssetManager.javaによると AssetManagerのインスタンスはアプリケーションから作れないんだわ。
オマケに AssetManagerのインスタンスはシングルトンになっている。
先述のコードは最終的にアプリケーショングローバルな言語設定を書き換えているので件の結果になったと。*1
結論として、やりたいことは「言語設定保存&読み込み&言語設定復帰をアトミックに行う」という泥臭い実装をするしかないということに…_no


*1 そこまでコードを追ってはいないけど、動作と調べた内容からするとそういうことになる。

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)