【问题标题】:Multi-lingual dynamic contents using PHP and MySQL使用 PHP 和 MySQL 的多语言动态内容
【发布时间】:2012-07-18 15:08:30
【问题描述】:

我正在使用 PHP 和 MySQL 开发一个网站 我将 XML 用于静态数据以便能够创建多语言网站 问题在于数据库中的其他内容是最好为每个表中的每种语言创建一个列还是什么? 而且我没有使用任何模板引擎 所以我想知道有什么好的方法可以解决这个问题。

提前致谢

【问题讨论】:

    标签: php mysql multilingual


    【解决方案1】:

    最好将language 列添加到数据库表中。将新内容保存到数据库时,必须设置语言。在前端,您根据用户选择的语言拉取内容。

    SELECT * FROM ContentTable WHERE ContentID=<pageid> AND Language='en'
    SELECT * FROM ContentTable WHERE ContentID=<pageid> AND Language='fr'
    

    【讨论】:

    • 非常感谢您的回答真的很有帮助。我必须等待 7 分钟才能接受答案
    • 没问题。如果您需要添加其他语言,这种方法会更简单。此外,您可能需要考虑使用“默认”语言。因此,例如,如果您有一个内容块没有某种语言的条目,您可以默认回到英语或其他内容。
    • 谢谢,我会确保有默认语言。那真是一个很好的暗示。你知道我对 PHP 还是很陌生
    【解决方案2】:

    也许你会在这里找到答案:

    Schema multi language database

    取决于您网站的架构和其他内容。

    希望对你有帮助:)

    【讨论】:

    • 非常感谢,真的很有帮助
    【解决方案3】:

    不,不要为每种语言创建一个列 - 这是不好的非规范化 - 您必须为每种新语言更改表。

    有一个这样的语言表:

    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 规范化,从不考虑每个字段设计的每种语言的列。

    【讨论】:

    • 谢谢 这真的很有帮助,而且所有答案都很棒。我希望我能全部接受。
    猜你喜欢
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    相关资源
    最近更新 更多