我正在尝试将多语言支持引入应用程序的后端,并试图找到一种策略,以有效地将其实现到当前模式中。
我目前有多个表,所有表都包含标准的英语值。
我的想法是在每个带有英文值的表格中,包括一个外键,该外键与保存翻译的表格中的单个“语言”和多个“语言值”相关联
因此,例如。
表1
Value | Lang_ID
"This is a sentence" | 1
"This is also a sentence" | 2
"Translate this" | 3
表2
Value | Lang_ID
"This is a sentence from another table" | 4
"This table is different from table-1" | 5
语言表
Lang_ID | Lang_Code | Value
1 | "ZHO" | "这是一句话"
1 | "SPA" | "esta es una frase"
2 | "FRA" | "c'est aussi une phrase"
3 | "SPA" | "traduce esto"
4 | "FRA" | "ceci est une phrase d'un autre tableau"
....
我的想法是,您只需要通过WHERE Lang_ID =查询语言表? AND Lang_Code =?以获得该特定值的翻译。
我想知道几件事
1)这是一个好习惯吗?
2)如何生成在多个表中尚不存在的外键,并使每个外键保持唯一(以免两个不同文本值的翻译不属于同一Lang_ID)
答案 0 :(得分:0)
使用另一个表存储翻译是一个好主意。我在个人工作中已经使用了它。就我而言,我从一开始就设计了翻译,因此我的表中没有字符串值,即使默认的英语值也位于翻译表中。
我也将语言代码放在一个单独的表中,尽管我从未发现需要它的情况,因此我建议您将它们保留在原处。
对于唯一ID,我建议使用类似的序列(无耻地被盗here):
create sequence sequence_name
start 1
increment 1
NO MAXVALUE
CACHE 1;
并在插入新字段进行翻译时使用next_val('sequence_name')
。