[解決済み] Android: リソースから名前を使って文字列を取得するには?
質問
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
はフォールバックのもので、ユーザーのロケールをカバーするフォルダがない場合は、このフォルダがデフォルト値として使用されます。
参照 ローカライゼーション と リソースの提供 をご覧ください。
関連
-
Android のパッケージングに失敗し、Android リソースのリンクに失敗したことを示すプロンプトが表示される
-
例外「指定された子にはすでに親がいます」の解決方法。removeViewを呼び出す必要があります" の解決方法(ソースコード付き例)
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
AndroidでAttempt to invoke virtual method... on null object referenceの例外が発生する。
-
cygwinのダウンロード、インストールチュートリアル、およびCDTの「makeプログラムがパスに見つからない」バグの解消
-
デフォルトのアクティビティが見つからない場合の対処法
-
アプリケーションがメインスレッドで過剰に作業している可能性があります。
-
android block certificate validation CertPathValidatorException: 認証パスのトラストアンカーが見つかりません
-
view.getRootView()の本当の意味とテストについて
-
Android カスタムスピナーコントロールのドロップダウン・ボックスの実装
-
Android.support.v7.widget.Toolbar が見つかりませんでした。
-
アンドロイドにおけるトークンの利用
-
Android studio 制約レイアウト ConstraintLayout