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