我正在使用PHP和MySQL开发一个网站我使用XML来创建静态数据,以便能够创建多语言网站,问题在于数据库中的其他内容是否更好地为每个表中的每种语言创建列或者什么? 我没有使用任何模板引擎 所以我想知道能够解决这个问题的好方法是什么。
提前致谢
答案 0 :(得分:2)
最好将language
列添加到数据库表中。将新内容保存到数据库时,必须设置该语言。在前端,您可以根据用户选择的语言提取内容。
SELECT * FROM ContentTable WHERE ContentID=<pageid> AND Language='en'
SELECT * FROM ContentTable WHERE ContentID=<pageid> AND Language='fr'
答案 1 :(得分:1)
答案 2 :(得分:1)
不,不要为每种语言创建一个列 - 这是错误的非规范化 - 你必须为每种新语言改变表。
拥有一个包含以下语言的表:
language_id, name, code
例如,当您有一个表text_pages
时,它可能如下所示:
page_id, language_id, title, content
然后每页每种语言都有一行。或者你可以让主表没有language_id
- 那里的记录将采用默认语言,第二个表text_pages_ml
保存page_id, language_id, title, content
- 只有其他语言,翻译!然后,您可以使用LEFT JOIN
轻松覆盖主记录,以防当前语言与默认语言不同。
请注意,第二个示例中的优势是您还可以拥有许多不应翻译的列!例如author_id, date_created, date_updated
等 - LEFT JOIN
将仅覆盖已翻译的主要字段,并且不会重复不需要翻译的数据!
有许多实现但是阅读有关RDB规范化的内容,并且从不考虑每个字段设计的每种语言的列。