3

这是我的第一个问题:)

我正在开发一个将动物物种存储在数据库中的应用程序。该应用程序必须是多语言的,所以我很难利用 strings.xml 资源文件。

想法是将物种的英文名称存储在数据库中,例如“cat”、“dog”等。然后基于这样的 xml(意大利语)向用户显示实际翻译:

<string name="dog">Cane</string>
<string name="cat">Gatto</string>

问题是 R.string 包含名称 dog 和 cat,但它们实际上是 int,所以我正在寻找一种使用“dog”字符串来比较 R.string.dog 翻译值的方法。

我几乎可以肯定我的设计非常错误,但不知道做这种工作的正确方法是什么,因为该应用程序现在处于开发的早期阶段。

谢谢

编辑示例

这个例子说明了这个问题:

数据库数据:

第 1 行:id="1",值="狗"

第 2 行:id="2",值="cat"

字符串文件strings.xml:

<string name="dog">Dog</string>
<string name="cat">Cat</string>

字符串文件strings-it.xml:

<string name="dog">Cane</string>
<string name="cat">Gatto</string>

我的问题是:用户想用他的母语插入一个物种(例如“甘蔗”),我想在插入之前在数据库中搜索它的存在。

我应该循环数据库上的每一行(其中值以英文存储),获取每一行的翻译(例如:我找到 cat,然后我翻译为“Gatto”)并与用户输入进行比较。

有可能这样做吗?

4

3 回答 3

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,我建议您只在启动时执行此操作,并将值保存在某种数组/列表中。

于 2013-07-30T15:45:21.127 回答
-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 文件中。

于 2013-07-30T10:41:07.480 回答
-2

好吧,首先,从这里开始阅读:

假设您的应用程序的默认语言是英语。还假设您希望将应用程序中的所有文本本地化为法语,并将应用程序中的大部分文本(除应用程序标题之外的所有内容)本地化为日语。在这种情况下,您可以创建三个备用 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 文件中加载英文标题。

于 2013-07-30T10:37:39.353 回答