0

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

我遵循的方法是

  • 创建一个包含两条记录(阿拉伯语和英语)的语言表
  • 创建一个包含普通数据的表(不是特定于语言的)
  • 创建一个包含特定语言内容的翻译表

例如,为了实现(帮助),我创建了以下表格:

Language        (int id, text Code)
Help            (int id)
Help_translation(int id, int Help_id, int Language_id, text Question, text Answer)

我已经阅读了这个解决方案很多次,但我仍然不知道为什么我们有一个单独的表(帮助),它什么都不做!

我的方法有问题吗?

4

1 回答 1

0

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

因此,Language 表可能有列:

  • id整数(自动增量)主键。
  • codechar(5) — 唯一的。

设计中的帮助表用于“文档”目的。它记录应用程序可以使用的有效帮助编号。该表的更完整版本可能包含有关消息的信息:它在应用程序中的使用位置;它是在哪个版本中引入的;哪个版本过时了(或者可能没有——我们有国际化的消息文件,这些文件必须能够在大约 10 年的时间内与版本一起使用);与版本相关的日期——或日期而不是版本;和“给翻译者的注释”(如何翻译信息的指南,如果需要任何特殊指南)。

仅带有帮助 ID 号的帮助表的简约版本暂时可以:

  • id整数(自动增量)。首要的关键。

Help_Translation 表存储应用程序将显示的字符串。该id列在这里的价值最小;我会省略它(但如果你愿意,你可以保留它)。该Help_ID列是对帮助表的外键引用;该Language_ID列是对语言表的外键引用。对于您选择的应用程序,每个帮助项目似乎都有一个问题和一个答案。

因此,Help_Translation 表具有以下列:

  • id整数(自动增量,可选,不确定何时使用)。
  • Help_ID整数 — 外键引用 Help(ID)。
  • Language_ID整数 — 外键引用语言 (ID)。
  • Questiontext — 给定 Help_ID 的适当语言的问题。
  • Answertext — 给定 Help_ID 的相应语言的问题答案。
  • 主键:Help_IDLanguage_ID

另一种设计将只是一个带有“消息 ID”和“语言 ID”的翻译表以及翻译后的字符串(消息 ID 和语言 ID 上的主键)。将有一个消息表,标识有效的消息 ID 以及先前类型大纲的支持数据。这可能包括在没有针对特定语言/地区的消息的翻译版本时使用的默认消息(未翻译)(或者您可以制定更复杂的方案来处理丢失的消息,以便在请求阿拉伯语但翻译因为,比如说,利比亚(LY)是不完整的,它回落到ar_sa然后才落到en_gb)。然后,您的帮助表可能包含一个帮助 ID,以及两个消息 ID 值,一个用于问题,一个用于答案。这种方案的优点是所有翻译的消息都在一个表中。

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

于 2012-12-29T22:02:52.160 回答