【问题标题】:Tables' schema for MySQL driven multi-language websiteMySQL 驱动的多语言网站的表模式
【发布时间】:2012-01-27 09:24:18
【问题描述】:

我正在开发多语言网站。尝试为此目的设计最佳数据库模式。

如您所见,有 2 个表:langsmenu我的想法如下:

例如。让我们看一下从 MySQL 表生成多语言导航。在 PHP 后端,同时从数据库生成导航

  • menu 表的行中获取所有数据
  • 左连接第二个表 - langs(由name 字段的menu 表) 并从已定义语言的列中获取数据(例如 en、ru)

您认为这是最佳方式,还是有更有效的解决方案?请给我与数据库相关的答案,而不是文件。 (例如 gettext 等)

【问题讨论】:

    标签: php mysql multilingual


    【解决方案1】:

    如果langs 表包含language 列会更好,每个翻译有一行。这允许您稍后添加另一种语言,并且只需应用数据更改(而不必重新编写查询)。

    正如您已经暗示的那样,执行左连接并回退到直接保存在 menus 表中的默认语言也是一个好主意(在这种情况下,您不需要为例如enlangs 表中,因为英文版始终可用)。

    您可能还需要考虑存储特定国家/地区的翻译(例如,如果有多个西班牙语国家/地区的翻译可能不同),并遵循查找的后备策略:language-countrylanguage、@ 987654328@翻译。

    【讨论】:

    • @TuralTeyyuboglu - 是的,虽然我会创建langsID, language 的主键,以便菜单1 的所有翻译都有ID1 .
    • 我应该像第二种解决方案一样使用外键吗? iw 会更快吗?
    • @TuralTeyyuboglu - 外键不是,主要是一种提高访问速度的机制。他们的主要目的是确保参照完整性 -
    【解决方案2】:

    您可以像这样进一步规范化:

    • tokenname:id,token(例如,(1,程序),(2,菜单))
    • 本地化:id, tokenname_id、语言、文本

    引用字符串的表然后通过 tokenname.id 作为外键引用字符串。

    请注意,您需要某种小型模板语言来进行文本本地化。

    【讨论】:

    猜你喜欢
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多