我想在我的资源文件 res\values\strings.xml
中有两种语言的 UI 和单独的字符串值:
<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)中,则可以像在此代码段中一样使用它。
另外请注意,整个语言依赖可以由 android 框架处理。
只需为每种语言创建不同的文件夹。如果英语是您的默认语言,只需将英语字符串放入 res/values/strings.xml
。然后新建一个文件夹values-ru
,把同名的俄语字符串放到res/values-ru/strings.xml
中。从这一点开始,android 会根据您的设备区域设置选择正确的区域,无论是当您调用 getString()
还是通过 @string/mystring
引用 XML 中的字符串时。
res/values/strings.xml
中的那些是备用的,如果您没有覆盖用户区域设置的文件夹,则该文件夹将用作默认值。
见 Localization和 Providing Resources了解更多信息。
关于Android:如何使用名称从资源中获取字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7493287/