我正在使用 PHP 和 MySQL 开发一个网站 我将 XML 用于静态数据以便能够创建多语言网站 问题在于数据库中的其他内容是为每个表中的每种语言创建一个列更好还是什么?而且我没有使用任何模板引擎所以我想知道能够解决这个问题的好方法是什么。
提前致谢
我正在使用 PHP 和 MySQL 开发一个网站 我将 XML 用于静态数据以便能够创建多语言网站 问题在于数据库中的其他内容是为每个表中的每种语言创建一个列更好还是什么?而且我没有使用任何模板引擎所以我想知道能够解决这个问题的好方法是什么。
提前致谢
最好language
在数据库表中添加一列。将新内容保存到数据库时,必须设置语言。在前端,您根据用户选择的语言提取内容。
SELECT * FROM ContentTable WHERE ContentID=<pageid> AND Language='en'
SELECT * FROM ContentTable WHERE ContentID=<pageid> AND Language='fr'
不,不要为每种语言创建一个列 - 这是不好的非规范化 - 您将不得不为每种新语言更改表。
有一张这样的语言表:
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 Normalization 并且从不考虑每个字段设计的每种语言的列。