根据此方法,第一个表中的默认语言已翻译。如果用户不需要翻译,他就不会挣扎。只需连接主表,就是所有......
产品表(InnoDB):
Obj_id(PK) name desc
--------- ------------------- ------------------
1 Million Dollar Baby Short description is...
2 Music Album Another explanation...
翻译表(InnoDB)
trans_id (PK) Obj_id (FK) lang field trans
-------------- ----------- ------ -------- ---------------------
22 1 TR name Milyonluk Bebek
23 1 BA name Djevojka od milijun...
24 1 TR desc Kisa açiklama burada
25 1 BA desc Kratki opis je ovdje
26 2 BA name Glazba albuma
但是当管理员想要更改默认语言时会出现问题。我有两种方法可以解决这个问题:
管理员必须在项目开始时决定default_lang,如果他以后仍想更改default_lang,程序会说:Go to hell
。
与第一个解决方案一样,admin必须首先决定default_lang,但系统将能够将新的default_lang数据从转换表传输到主表(我实际上并没有这样做)。
< / LI> 醇>我认为我的解决方案不够好。
你是否更好地了解DEFAULT_LANG问题,无论是否改变结构(如果可能的话,不要改变结构 - 我喜欢它)?
答案 0 :(得分:4)
我想知道每种语言的表格会更好。这样你就可以换掉正在使用的表格。
TRANSLATIONS_TR
TRANSLATIONS_EN
TRANSLATIONS_FR
TRANSLATIONS_BR
然后在您的用户显示例程中,您决定在显示翻译文本时要查询的表。
答案 1 :(得分:1)
我认为我的方法是(我正在自己构建这个过程):
可能(1)产品有(N)名称(取决于语言,假设您只有一列描述语言,例如'es','en')
[ Product ]—(1)—————(N)-[ProductName]
| id | | name |
| language |
在N:M关系中,也许是更好的产品语言:
[ Product ]-(N)—————————(M)-[Language]
| id | | |iso_code|
(translation) | name |
[ Product ]<————[ProdTranslation]———>[language]
| id | | name | |iso_code|
|default name?| | name |--- (name of language: "English")
另一个选择可能是将产品的每个翻译都视为“类型”产品(子类)。逻辑模型如下:
[ Product ]
| id |-(1)————(1)-[ EnglishProduct ]
|default name?| | name (in eng.) |
| |
| |-(1)——(1)-[FrenchProduct]
| | | name(in fr.)|
当在关系数据库中实现它时,你可以a)有3个表(在这个例子中,更多用于更多语言)或b)将它们全部放在一个表中。这取决于您将拥有多少种语言,名称/描述的大小,性能等。
[ Product ]
| id |
| name_en |
| name_fr |
| name_de |
查询数据库的代码将知道要使用的语言,然后从右列查询名称。
答案 2 :(得分:0)
你看过gettext吗?
答案 3 :(得分:0)
gettext解决了一个与多语言数据库不同的问题:gettext用于UI,而数据库用于内容。
您可以使用gettext或等效的工具,例如错误消息,按钮标签或页面标题,其中有一小部分不经常更改的项目。
多语言数据库适用于大量内容,可能会或可能不会经常更改,例如,数十万本书籍和电影的标题,或者招标说明。