cakephp.org 上没有文档,我在谷歌上也找不到。请链接我一些文档或提供一个!
Alexander
问问题
7210 次
2 回答
13
翻译行为是 CakePHP 的另一个非常有用但文档很少的特性。我已经按照以下思路在多语言网站中实现了几次,并取得了相当大的成功。
首先,翻译行为只会使您网站的数据库内容国际化。如果你有更多的静态内容,你会想看看 Cake 的__('string')
包装函数和(这里gettext
有一些有用的信息)
假设我们要使用以下数据库表翻译内容:
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 模型有:
var $actsAs = array('Translate' => array('title' => 'titleTranslation',
'body' => 'bodyTranslation'
));
在其定义中。然后,您需要将 i18n 表添加到数据库中:
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;
然后,当您将数据保存到控制器中的数据库时,将语言环境设置为您想要的语言(此示例适用于波兰语):
$this->Content->locale = 'pol';
$result = $this->Content->save($this->data);
这将在 i18n 表中为 pol 语言环境的标题和正文字段创建条目。查找将根据用户浏览器中设置的当前语言环境进行查找,返回如下数组:
[Content]
[id]
[titleTranslation]
[bodyTranslation]
我们使用优秀的p28n 组件来实现一个语言切换解决方案,该解决方案与 gettext 和 translate 行为配合得非常好。
这不是一个完美的系统——因为它会即时创建 HABTM 关系,它可能会导致您可能手动创建的其他关系出现一些问题,但如果您小心,它可以很好地工作。
于 2008-09-19T09:11:39.687 回答
0
对于任何搜索相同内容的人,cakephp 更新了他们的文档。对于翻译行为去这里..
于 2014-02-28T07:02:05.217 回答