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
。
私の場合はなぜ機能しないのでしょうか?
ベストアンサー1
あなたが参照しているリンクは、実行時に生成された文字列で機能するようです。strings.xmlの文字列は実行時に作成されません。
String mystring = getResources().getString(R.string.mystring);
getResources()
は クラスのメソッドです。または(Context を拡張する)Context
の内部にいる場合は、このスニペットのように使用できます。Activity
Service
また、言語依存性全体は Android フレームワークによって処理できることにも注意してください。言語ごとに異なるフォルダを作成するだけです。英語がデフォルト言語の場合は、英語の文字列を に配置しますres/values/strings.xml
。次に、新しいフォルダを作成しvalues-ru
、同じ名前のロシア語の文字列を に配置します。この時点から、 を呼び出すとき、または を介して XML 内の文字列を参照するときに、res/values-ru/strings.xml
Android はデバイスのロケールに応じて正しいものを選択します。 からのものはフォールバックのものであり、ユーザーのロケールをカバーするフォルダがない場合は、これがデフォルト値として使用されます。getString()
@string/mystring
res/values/strings.xml