这是我的第一个问题:)
我正在开发一个将动物物种存储在数据库中的应用程序。应用程序必须是多语言,所以我应该利用strings.xml资源文件。
想法是在db上存储物种的英文名称,例如“cat”,“dog”等。然后根据像这样的xml(意大利语)向用户显示实际的翻译。 :
<string name="dog">Cane</string>
<string name="cat">Gatto</string>
问题是R.string包含名称dog和cat,但它们实际上是int,所以我正在寻找一种方法来使用“dog”字符串来比较R.string.dog翻译的值
我几乎可以肯定我的设计是非常错误的,但不知道做这种工作的正确方法是什么,因为应用程序现在处于开发的早期阶段。
谢谢
使用示例编辑
此示例说明了问题:
数据库数据:
row1:id =“1”,value =“dog”
row2:id =“2”,value =“cat”
String file strings.xml:
<string name="dog">Dog</string>
<string name="cat">Cat</string>
字符串文件字符串-it.xml:
<string name="dog">Cane</string>
<string name="cat">Gatto</string>
我的问题是:用户想要用他的母语插入一个硬币(例如“Cane”),我想在插入之前在DB中搜索它的存在。
我应该循环DB上的每一行(其中值以英语存储),获取每行的翻译(例如:我找到了cat,然后我翻译为“Gatto”)并与用户输入进行比较。
有可能吗?
答案 0 :(得分:6)
如果您要使用字符串名称,则可以使用getIdentifier()
来获取字符串ID。例如,要查找R.string.cat
:
Resources res = getResources();
int stringId = res.getIdentifier("cat", "string", packageName);
在上面的例子中,如果找不到R.string.cat,它将只返回0.这是一个简单的测试,看看是否存在字符串。
或者,您可以使用以下内容获取R.java中所有字符串ID的数组:
Field[] fields = R.string.class.getFields();
int[] ids = new int[fields.length];
for(int i=0;i<field.length;i++)
ids[i] = field[i].getInt(null);
当然,这也会查找你并不真正想要翻译的任何字符串,例如对话框/窗口标题,标签/按钮标题等。我不会在一般情况下提供建议。如果我有这样做,我会在“翻译”字符串前加上一些东西,这样我就可以很容易地说出什么是"entry_cat"
。
请注意,我们正在使用反射,如果你有很多的字符串,它可能会减慢你的速度。如果 要遍历R.java,我建议只在启动时执行,并将值保存在某种数组/列表中。
答案 1 :(得分:-1)
首先阅读此内容。
http://developer.android.com/training/basics/supporting-devices/languages.html
您可以使用多种语言创建值文件夹,即janapee,dutch等
您可以在项目的res文件夹中找到value文件夹。并创建新的值文件夹。
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml
只需用Google翻译以任何语言翻译你的单词并将其放在STRING.XML文件中。
答案 2 :(得分:-2)
首先,请先阅读此here:
假设您的应用程序的默认语言是英语。假设 您还想要将应用程序中的所有文本本地化 法语和您应用程序中的大部分文本(除了以外的所有内容) 应用程序的标题)到日语。在这种情况下,您可以创建 三个替代strings.xml文件,每个文件都存储在特定于语言环境的文件中 资源目录:
res / values / strings.xml包含所有字符串的英文文本 应用程序使用,包括名为title的字符串的文本。 res / values-fr / strings.xml包含所有字符串的法语文本, 包括头衔。 res / values-ja / strings.xml包含日文文本 除标题外的所有字符串。如果您的Java代码引用 R.string.title,这是在运行时会发生的事情:
如果设备设置为法语以外的任何语言,Android将会 从res / values / strings.xml文件加载标题。如果设备已设置 对于法语,Android将从res / values-fr / strings.xml加载标题 文件。请注意,如果设备设置为日语,Android将会显示 对于res / values-ja / strings.xml文件中的标题。但因为没有这样的 字符串包含在该文件中,Android将回归到 默认,并将从中加载英文标题 res / values / strings.xml文件。