1. ホーム
  2. android

[解決済み] Android: リソースから名前を使って文字列を取得するには?

2022-03-15 05:44:35

質問

UIに2つの言語を用意し、リソースファイルにそれぞれ別の文字列値を記述したい。 res\values\strings.xml :

<string name="tab_Books_en">Books</string>
<string name="tab_Quotes_en">Quotes</string>
<string name="tab_Questions_en">Questions</string>
<string name="tab_Notes_en">Notes</string>
<string name="tab_Bookmarks_en">Bookmarks</string>

<string name="tab_Books_ru">Книги</string>
<string name="tab_Quotes_ru">Цитаты</string>
<string name="tab_Questions_ru">Вопросы</string>
<string name="tab_Notes_ru">Заметки</string>
<string name="tab_Bookmarks_ru">Закладки</string>

さて、これらの値を私のアプリで動的に取得する必要があります。

spec.setContent(R.id.tabPage1);
String pack = getPackageName();
String id = "tab_Books_" + Central.lang;
int i = Central.Res.getIdentifier(id, "string", pack);
String str = Central.Res.getString(i);

私の問題点は i = 0 .

なぜ私の場合はうまくいかないのでしょうか?

解決方法は?

ご紹介のリンクは、実行時に生成される文字列で動作しているようです。strings.xmlの文字列は、実行時に生成されるものではありません。 以下の方法で取得することができます。

String mystring = getResources().getString(R.string.mystring);

getResources() のメソッドです。 Context クラスがあります。の中にいる場合は Activity または Service (Contextを拡張したもの) を使用すると、次のようになります。

また 言語依存はすべてアンドロイドフレームワークで処理できることに注意してください。 . 各言語ごとに異なるフォルダを作成するだけです。もし英語がデフォルトの言語であれば、英語の文字列は単に res/values/strings.xml . 次に、新しいフォルダ values-ru の中に、同じ名前のロシア語の文字列を入れます。 res/values-ru/strings.xml . この時点から、アンドロイドはデバイスのロケールに応じて正しいものを選択します。 getString() を使用してXML内の文字列を参照する場合、または @string/mystring . のものは res/values/strings.xml はフォールバックのもので、ユーザーのロケールをカバーするフォルダがない場合は、このフォルダがデフォルト値として使用されます。

参照 ローカライゼーション リソースの提供 をご覧ください。