cakephp.org上没有文档,我无法在Google上找到任何文档。请给我链接一些文档或提供一个文档!
CakePHP的另一个非常有用的功能就是其翻译行为,但文献记载不多。我已经在多语言网站上成功实现了几次,并遵循以下原则。
首先,转换行为只会使您网站的数据库内容国际化。如果您还有其他静态内容,则需要查看Cake的__('string')包装函数和gettext(此处有一些有用的信息)
假设要使用以下数据库表转换内容:
1 2 3 4 5 6
| CREATE TABLE `contents` (
`id` int(11) unsigned NOT NULL auto_increment,
`title` varchar(255) default NULL,
`body` text,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
content.php模型将具有:
1 2 3
| var $actsAs = array('Translate' => array('title' => 'titleTranslation',
'body' => 'bodyTranslation'
)); |
在其定义中。然后,您需要这样将i18n表添加到数据库中:
1 2 3 4 5 6 7 8 9
| CREATE TABLE `i18n` (
`id` int(10) NOT NULL auto_increment,
`locale` varchar(6) NOT NULL,
`model` varchar(255) NOT NULL,
`foreign_key` int(10) NOT NULL,
`field` varchar(255) NOT NULL,
`content` mediumtext,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
然后在将数据保存到控制器中的数据库时,将语言环境设置为所需的语言(此示例适用于波兰语):
1 2
| $this->Content->locale = 'pol';
$result = $this->Content->save($this->data); |
这将在i18n表中为pol语言环境的标题和正文字段创建条目。查找结果将根据用户浏览器中当前设置的语言环境进行查找,并返回如下数组:
1 2 3 4
| [Content]
[id]
[titleTranslation]
[bodyTranslation] |
我们使用了出色的p28n组件来实现一种语言切换解决方案,该解决方案与gettext和翻译行为配合得很好。
这不是一个完美的系统-因为它会动态创建HABTM关系,因此可能会导致您可能手动创建的其他关系出现一些问题,但是如果您小心一点,它会很好地工作。
对于搜索同一内容的任何人,cakephp更新了其文档。有关翻译行为,请点击此处。.