Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 多语言数据库_Android_Database_Database Design_Localization_Multilingual - Fatal编程技术网

Android 多语言数据库

Android 多语言数据库,android,database,database-design,localization,multilingual,Android,Database,Database Design,Localization,Multilingual,我正在开发一个支持阿拉伯语和英语的Android应用程序,但我仍然对数据库设计感到困惑: 我所采用的方法是 创建包含两条记录(阿拉伯语和英语)的语言表 创建包含普通数据(非特定语言)的表 创建包含特定语言内容的翻译表 例如,为了实现(帮助),我创建了以下表格: Language (int id, text Code) Help (int id) Help_translation(int id, int Help_id, int Language_id, t

我正在开发一个支持阿拉伯语和英语的Android应用程序,但我仍然对数据库设计感到困惑:

我所采用的方法是

  • 创建包含两条记录(阿拉伯语和英语)的语言表
  • 创建包含普通数据(非特定语言)的表
  • 创建包含特定语言内容的翻译表
例如,为了实现(帮助),我创建了以下表格:

Language        (int id, text Code)
Help            (int id)
Help_translation(int id, int Help_id, int Language_id, text Question, text Answer)
我已经读了这么多次这个解决方案,但我仍然不知道为什么我们有一个单独的表(帮助),但没有任何作用


我的方法有问题吗?

从表面上看,语言表将在系统中出现一次。我建议根据ISO国家代码(ISO 3166)和ISO语言代码(ISO 639-2),对语言和地域使用“ll_tt”符号。因此,英式英语可能有
en_gb
,美式英语可能有
en_us
,沙特阿拉伯阿拉伯语可能有
ar_sa
,埃及阿拉伯语可能有
ar_eg
。这可能比您当前需要的功能更强大,但会为您的未来指明方向

因此,语言表可能有以下列:

  • id
    integer(自动递增)主键
  • code
    char(5)-唯一
设计中的帮助表用于“文档”目的。它记录应用程序可以使用的有效帮助号码。表的更完整版本可能包括有关消息的信息:消息在应用程序中的使用位置;它是在哪个版本引入的;哪个版本已经过时了(或者可能没有——我们已经国际化了消息文件,这些文件必须在大约10年的时间内与发行版一起使用);与版本关联的日期-或代替版本的日期;以及“译者须知”(如果需要任何特殊指南,请提供如何翻译信息的指南)

目前,仅包含帮助ID号的帮助表的最低版本可以:

  • id
    integer(自动递增)。主键
Help_Translation表存储应用程序将显示的字符串。
id
列在这里的值最小;我想省略它(但如果你愿意,你可以保留它)。
Help\u ID
列是对帮助表的外键引用;
Language\u ID
列是语言表的外键引用。对于您选择的应用程序,每个帮助项目似乎都有一个问题和一个答案

因此,Help_Translation表包含以下列:

  • id
    integer(自动递增,可选,不确定何时使用)
  • Help\u ID
    integer-外键引用帮助(ID)
  • Language\u ID
    integer-外键引用语言(ID)
  • 问题
    文本-针对给定的帮助ID,以适当的语言提出的问题
  • Answer
    text-以给定帮助ID的适当语言回答问题
  • 主键:
    Help\u ID
    Language\u ID
另一种设计是一个翻译表,其中包含“消息ID”和“语言ID”以及翻译后的字符串(消息ID和语言ID上的主键)。将有一个消息表,用于标识有效的消息ID以及之前类型outline的支持数据。这可能包括在没有特定语言/地区的翻译版本时要使用的默认消息(未翻译)(或者您可以制定更复杂的方案来处理丢失的消息,以便在请求阿拉伯语但需要翻译(例如利比亚)时使用如果不完整,它将返回到
ar_sa
,然后才返回到
en_gb
)。然后,帮助表可能包含一个帮助ID,外加两个消息ID值,一个用于问题,一个用于答案。此方案的优点是所有翻译的消息都位于一个表中


毫无疑问,还有其他的方案可以设计。

谢谢你,这对我帮助很大。。因为我混淆了创建多个列(每种语言一个)和我在这里编写的解决方案。这个解决方案比多个列、每种语言一个要好得多,尤其是在编写SELECT语句来检索数据时!