gpt4 book ai didi

android - 使用 strings.xml 在数据库中存储多语言值的最佳方式?

转载 作者:太空狗 更新时间:2023-10-29 12:46:08 25 4
gpt4 key购买 nike

这是我的第一个问题:)

我正在开发一个将动物物种存储在数据库中的应用程序。该应用程序必须是多语言的,所以我想利用 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", value="dog"

第 2 行:id="2", value="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>

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

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

这有可能吗?

最佳答案

如果你有一个你想使用的字符串名称,你可以使用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,我建议只在启动时这样做,并将值保存在某种数组/列表中。

关于android - 使用 strings.xml 在数据库中存储多语言值的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17944664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com