我已经使用PHP和MYSQL为后端制作了CMS。问题是,我希望网站有多种语言版本;所以我已经翻译了CMS本身并将其放在如下文件中:
哪个适用于CMS的内容本身,如管理等。当我尝试进一步翻译网站时会出现实际问题:博客帖子和页面存储在数据库中,因此它们是动态的。我的页面表的结构如下所示:
urlname | name | id | content | position | hidden | redirect | type | permission
所以,如果我要翻译一个页面,例如荷兰语,我不想创建一个名为pages_nl
的新表,因为大多数信息都与其他信息相同表。
我可以添加一行包含页面可用语言的行,如果当前$lang
与页面的可用语言匹配,则让php读取数组并解析,然后阅读content_nl
和{{1}以行为例
我的博客帖子也会出现同样的问题,我搜索了一个解决方案,但大多数结果都是针对特定的CMS和插件。
我在问什么是存储多语言页面/帖子的最佳方式(和数据库结构),其中语言可以动态添加,如果没有可用的翻译版本,则会对原始内容进行回退。
答案 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
并单击翻译按钮。这将在英语周围添加一个标记,当您渲染内容时,您扫描此标记,如果您以所请求的语言找到该字符串的任何翻译,则将其替换。