我确实有很多语言具体的资源.在我的
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);
使事情清晰我不想错过使用字符串资源作为数据库.这只是在极少数情况下发生的一部分.
解决方法
你正在使用getIdentifier错误.您不要指定文本,而是指定文本的标识符,在您的情况下,这将是txt_afirsttext或txt_asecondtext.
int i = this.getResources(). getIdentifier("txt_asecondtext","string",this.getPackageName());
我认为没有办法通过其内容找到一个String资源标识符.这就像传递一个字节流来定位一个drawable.
你的应用程序真的需要这种奇怪的获取资源的方法吗?我相信你可以使用更好的方法动态加载资源,虽然你的第一段描述你的场景是一个神秘的:)
编辑:答案固定.感谢tdroza的纠正.