多语言翻译模块的数据库模型

时间:2018-01-16 10:15:02

标签: php mysql database oracle postgresql

我需要为后端模块设计数据库模型,用户可以将页面内容翻译成多种语言。将要翻译的内容是基本单词,短语,链接名称,标题,字段名称,字段值。它们也应该分组,以便我可以按组名找到它们。例如,如果页面上有一个选择字段,其中有不同的颜色作为选项,那么我应该能够按组名称选择所有这些字段。

所以这就是我现在所拥有的:

lang
+----+---------+
| id |  name   |
+----+---------+
|  1 | english |
|  2 | german  |
+----+---------+

lang_entity
+----+------------+-------------+-------+-------+
| id |   module   |    group    | name  | order |
+----+------------+-------------+-------+-------+
|  1 | general    |             | hello |     0 |
|  2 | accounting | colorSelect | one   |     1 |
|  3 | accounting | colorSelect | two   |     2 |
|  4 | accounting | colorSelect | three |     3 |
+----+------------+-------------+-------+-------+

lang_entity_translation
+----+---------+----------------+-------------+
| id | lang_id | lang_entity_id | translation |
+----+---------+----------------+-------------+
|  1 |       1 |              1 | Hello       |
|  2 |       2 |              1 | Guten tag   |
|  3 |       1 |              2 | One         |
|  4 |       2 |              2 | Ein         |
|  5 |       1 |              3 | Two         |
|  6 |       2 |              3 | Zwei        |
|  7 |       1 |              4 | Three       |
|  8 |       2 |              4 | Drei        |
+----+---------+----------------+-------------+

所以lang表拥有不同的语言。

表lang_entity包含可以翻译为不同语言的实体。 模块行只是按后端转换模块中的页面模块对它们进行分组。这也让我有可能让不同模块具有相同名称的实体。 如上所述的组是选择,也可能是其他一些将要使用多个值的地方。这也为我提供了一个允许用户在一个组中添加和排序实体的选项。

表lang_entity_translation包含每种语言中每个实体的翻译。

所以我的问题是在这种设计中有明显的缺陷吗?你会推荐不同的东西吗?

也是一个额外的问题:我真的不喜欢lang_entity表名,你是否更好地了解了一个表名,它可以包含所有被翻译的单词/短语? :)

编辑:类似但不重复。链接的问题是关于翻译动态产品并为每种翻译类型分配一个单独的表。我正在谈论翻译整个页面内容,包括在一个表中的组。

2 个答案:

答案 0 :(得分:1)

我们有类似的情况。这是7年前。 我们针对不同的语言有不同的专栏。喜欢我们的名字 Name_Eng,Name_Ger,Name_Spa。我们有7-10种语言。

我们对所有语言的名称都有共同的id。

根据UI中的语言选择,我们将语言代码传递给后端在存储过程中,它被附加到列名称 例如,我们将通过" Eng"如果选择了英语,我们将列名称形成为Name_Eng并获取数据。我们使用的是动态查询。

答案 1 :(得分:1)

我不理解order的{​​{1}}列,但我可能不需要。

设置看起来很清晰,但请确保将lang_entity的外键约束添加到lang_entity_translationlanguage

至于命名,我会调用表lang_entityphrase