【发布时间】:2012-07-18 15:08:30
【问题描述】:
我正在使用 PHP 和 MySQL 开发一个网站 我将 XML 用于静态数据以便能够创建多语言网站 问题在于数据库中的其他内容是最好为每个表中的每种语言创建一个列还是什么? 而且我没有使用任何模板引擎 所以我想知道有什么好的方法可以解决这个问题。
提前致谢
【问题讨论】:
标签: php mysql multilingual
我正在使用 PHP 和 MySQL 开发一个网站 我将 XML 用于静态数据以便能够创建多语言网站 问题在于数据库中的其他内容是最好为每个表中的每种语言创建一个列还是什么? 而且我没有使用任何模板引擎 所以我想知道有什么好的方法可以解决这个问题。
提前致谢
【问题讨论】:
标签: php mysql multilingual
最好将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 规范化,从不考虑每个字段设计的每种语言的列。
【讨论】: