如何使我的CMS多语言

时间:2014-12-20 11:04:06

标签: php mysql database multilingual

我已经使用PHP和MYSQL为后端制作了CMS。问题是,我希望网站有多种语言版本;所以我已经翻译了CMS本身并将其放在如下文件中:

  • en.ini
  • nl.ini

哪个适用于CMS的内容本身,如管理等。当我尝试进一步翻译网站时会出现实际问题:博客帖子和页面存储在数据库中,因此它们是动态的。我的页面表的结构如下所示:

urlname | name | id | content | position | hidden | redirect | type | permission

所以,如果我要翻译一个页面,例如荷兰语,我不想创建一个名为pages_nl的新表,因为大多数信息都与其他信息相同表。
我可以添加一行包含页面可用语言的行,如果当前$lang与页面的可用语言匹配,则让php读取数组并解析,然后阅读content_nl和{{1}以行为例 我的博客帖子也会出现同样的问题,我搜索了一个解决方案,但大多数结果都是针对特定的CMS和插件。

我在问什么是存储多语言页面/帖子的最佳方式(和数据库结构),其中语言可以动态添加,如果没有可用的翻译版本,则会对原始内容进行回退。

1 个答案:

答案 0 :(得分:0)

基本上你将lang-key添加到数据库

urlname | name | id | content | position | hidden | redirect | type | permission | lang

现在假设有一个包含5个内容元素的页面的请求。您的CMS首先搜索具有特定语言代码的条目,例如nl。如果它没有找到带有语言代码的条目,则它会回退到默认语言并获取该条目。

假设您已翻译了内容1,3和5:

Content 1       Content 1 nl
Content 2
Content 3       Content 3 nl
Content 4
Content 5       Content 5 nl

Result:

Content 1 nl
Content 2
Content 3 nl
Content 4
Content 5 nl

另一种方法是在模板文件中进行翻译(就像magento那样)。 在magento你有类似的东西:

"Hello, this is the " . $this->__("English") . " page"

和翻译文件。例如lang.nl:

"English", "Dutch"

在这种情况下,您将只有1个内容元素,但您将包装要翻译的每个元素。这也适用于图像和您想要的一切。您还可以抽象此包装器以在后端RTE-Editor中工作。例如,您将在后端编写Hello, this is the English page,然后标记English并单击翻译按钮。这将在英语周围添加一个标记,当您渲染内容时,您扫描此标记,如果您以所请求的语言找到该字符串的任何翻译,则将其替换。