我想在我的资源文件 res\values\strings.xml
中为 UI 提供 2 种语言和单独的字符串值:
<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
。
为什么它在我的情况下不起作用?
原文由 Ivan 发布,翻译遵循 CC BY-SA 4.0 许可协议
您所指的链接似乎适用于运行时生成的字符串。 strings.xml 中的字符串不是在运行时创建的。你可以通过
getResources()
是Context
类的方法。如果您在Activity
或Service
(扩展上下文)中,则可以像在此代码段中一样使用它。另 请注意,整个语言依赖关系可以由 android 框架处理。只需为每种语言创建不同的文件夹。如果英语是您的默认语言,只需将英语字符串放入
res/values/strings.xml
。然后新建一个文件夹values-ru
并将同名的俄语字符串放入res/values-ru/strings.xml
。从这一点开始,android会根据您的设备区域设置选择正确的区域,无论是当您调用getString()
还是通过@string/mystring
引用 XML 中的字符串时。来自res/values/strings.xml
的那些是后备的,如果您没有覆盖用户区域设置的文件夹,则该文件夹将用作默认值。有关更多信息,请参阅 本地化 和 提供资源。