繁体   English   中英

如何使我的CMS多语言化

[英]How to make my CMS multilingual

我已经使用PHP和MYSQL作为后端制作了CMS。 问题是,我想以多种语言提供该网站。 因此,我已经翻译了CMS本身并将其放入以下文件中:

  • en.ini
  • nl.ini

它对于CMS内容本身(例如管理部门等)的工作正常。当我尝试进一步翻译网站时,会出现实际问题:博客文章和页面存储在数据库中,因此它们是动态的。 我的页面表的结构如下所示:

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

因此,如果要将页面翻译成荷兰语,例如,我不想创建一个名为pages_nl的新表,因为大多数信息将与另一个表相同。
我可以添加一行包含页面可用语言的行,并让php读取数组并分析当前$lang与页面可用语言之一匹配,然后读取content_nlname_nl行作为示例。
我的博客文章也会发生同样的问题,我已经在寻找解决方案,但是大多数结果都是针对特定的CMS和插件的。

我想问的是,存储多语言页面/帖子的最佳方法(和数据库结构)是什么,如果没有可用的翻译版本,可以动态添加语言并对原始内容有所保留。

基本上,您可以向数据库中添加语言键

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编辑器中工作。 例如,您将编写Hello, this is the English page您后端Hello, this is the English page ,然后标记为English并单击翻译按钮。 这将在英语周围添加一个标签,并且在渲染内容时扫描该标签,如果在请求的语言中找到此字符串的任何翻译,则将其替换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM