使用strings.xml在数据库上存储多语言值的最佳方法?

时间:2013-07-30 10:35:02

标签: android

这是我的第一个问题:)

我正在开发一个将动物物种存储在数据库中的应用程序。应用程序必须是多语言,所以我应该利用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”)并与用户输入进行比较。

有可能吗?

3 个答案:

答案 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文件。