我确实有很多语言特定的资源。我的Android应用程序中有一点我获得了资源值,需要将此值转换为匹配的ID。该值不一定在当前语言的语言特定文件中(en / de / ...)。它就在那里...而且它是独一无二的。
在阅读了文档和这个帖子“How to get a resource id with a known resource name?”后,我认为getIdentifier(String name, String defType, String defPackage)
是正确的方法,但我无法让它发挥作用。结果始终为“0”。
此代码是活动的一部分,我在Android 2.2上。
Android是否可能不考虑所有资源文件并仅使用当前特定语言进行搜索?
例如(当前语言为“de”):
File: values-en/strings.xml
<resources>
<string name="txt_afirsttext">A first text</string>
<string name="txt_asecondtext">A second text</string>
</resources>
File: values-de/strings.xml
<resources>
<string name="txt_afirsttext">Ein erster Text</string>
<string name="txt_asecondtext">Ein zweiter Text</string>
</resources>
// Now I want to find the ID to this "en" text ...
String testValue = "A second text";
int i = this.getResources().getIdentifier(testValue, "strings", this.getPackageName());
// ... and translate it to the actual "de" language
String translatedValue = this.getResources().getString(i);
说清楚。我不想错过使用字符串资源作为数据库。它只是在非常罕见的情况下发生的一部分。
答案 0 :(得分:29)
您使用 getIdentifier 错误。在您的情况下,您不会指定文本,而是指定文本的标识符 txt_afirsttext 或 txt_asecondtext 。
int i = this.getResources().
getIdentifier("txt_asecondtext", "string", this.getPackageName());
我认为无法通过其内容找到String资源标识符。这就像传递一个字节流来定位一个drawable。
您的应用程序是否真的需要这种奇怪的获取资源的方法?我很确定你可以使用更好的方法动态加载资源,虽然你的第一段描述你的场景是一个神秘的场景:)
编辑:答案已修复。感谢tdroza的纠正。
答案 1 :(得分:11)
对上面的代码示例进行了一个小但重要的更正:资源类型必须是单数而不是复数。即“字符串”而不是“字符串” - 同样适用于drawable,id,array等。
E.g。
int i = this.getResources().getIdentifier(testValue, "string", this.getPackageName());