这是我的第一个问题:)
我正在开发一个将动物物种存储在数据库中的应用程序.该应用程序必须是多语言的,所以我很难利用使用strings.xml资源文件.
这个想法是将物种的英文名称存储在数据库中,例如“ 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”,值=“ 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>
我的问题是:用户想用他的母语(例如“藤”)插入一个物种,并且我想在插入之前在数据库中搜索它的存在.
我应该为DB上的每一行(值以英语存储)循环,获取每一行的翻译(例如:我找到了cat,然后翻译为“ 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在数据库上存储多语言值的最佳方法?全部内容,希望文章能够帮你解决android-使用strings.xml在数据库上存储多语言值的最佳方法?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)