从表面上看,语言表会在系统中出现一次。我建议根据 ISO 国家代码 (ISO 3166) 和 ISO 语言代码 (ISO 639-2) 对语言和地区使用“ll_tt”表示法。因此,您可能有en_gb
英国英语、en_us
美国英语、ar_sa
沙特阿拉伯阿拉伯语和ar_eg
埃及阿拉伯语。这可能比您当前需要的更强大,但会为您指明未来的方向。
因此,Language 表可能有列:
id
整数(自动增量)主键。
code
char(5) — 唯一的。
设计中的帮助表用于“文档”目的。它记录应用程序可以使用的有效帮助编号。该表的更完整版本可能包含有关消息的信息:它在应用程序中的使用位置;它是在哪个版本中引入的;哪个版本过时了(或者可能没有——我们有国际化的消息文件,这些文件必须能够在大约 10 年的时间内与版本一起使用);与版本相关的日期——或日期而不是版本;和“给翻译者的注释”(如何翻译信息的指南,如果需要任何特殊指南)。
仅带有帮助 ID 号的帮助表的简约版本暂时可以:
Help_Translation 表存储应用程序将显示的字符串。该id
列在这里的价值最小;我会省略它(但如果你愿意,你可以保留它)。该Help_ID
列是对帮助表的外键引用;该Language_ID
列是对语言表的外键引用。对于您选择的应用程序,每个帮助项目似乎都有一个问题和一个答案。
因此,Help_Translation 表具有以下列:
id
整数(自动增量,可选,不确定何时使用)。
Help_ID
整数 — 外键引用 Help(ID)。
Language_ID
整数 — 外键引用语言 (ID)。
Question
text — 给定 Help_ID 的适当语言的问题。
Answer
text — 给定 Help_ID 的相应语言的问题答案。
- 主键:
Help_ID
和Language_ID
。
另一种设计将只是一个带有“消息 ID”和“语言 ID”的翻译表以及翻译后的字符串(消息 ID 和语言 ID 上的主键)。将有一个消息表,标识有效的消息 ID 以及先前类型大纲的支持数据。这可能包括在没有针对特定语言/地区的消息的翻译版本时使用的默认消息(未翻译)(或者您可以制定更复杂的方案来处理丢失的消息,以便在请求阿拉伯语但翻译因为,比如说,利比亚(LY)是不完整的,它回落到ar_sa
然后才落到en_gb
)。然后,您的帮助表可能包含一个帮助 ID,以及两个消息 ID 值,一个用于问题,一个用于答案。这种方案的优点是所有翻译的消息都在一个表中。
毫无疑问,还有其他可以设计的方案。