CakePHP无法在保存时将翻译保存到i18n

CakePHP无法在保存时将翻译保存到i18n,cakephp,internationalization,translation,cakephp-2.2,Cakephp,Internationalization,Translation,Cakephp 2.2,试图了解CakePHP2的翻译行为,但在创建内容步骤时失败了 我们正在尝试根据访问该站点的子域进行翻译。因此,en.example.com将是英语网站,fr.example.com将是法语网站。然后通过检查HTTP主机在引导中设置区域设置:- switch ($_SERVER['HTTP_HOST']) { case 'fr.example.com': Configure::write('Config.language', 'fre'); break;

试图了解CakePHP2的翻译行为,但在创建内容步骤时失败了

我们正在尝试根据访问该站点的子域进行翻译。因此,en.example.com将是英语网站,fr.example.com将是法语网站。然后通过检查HTTP主机在引导中设置区域设置:-

switch ($_SERVER['HTTP_HOST']) {
    case 'fr.example.com':
        Configure::write('Config.language', 'fre');
        break;
    case 'en.example.com':
    default:
        Configure::write('Config.language', 'eng');
        break;

}
我已经使用i18nshell脚本创建了i18n表,并测试了如果我手动向表中添加一些翻译后的字段,上面的配置是否可以用于检索数据

我们有一个页面模型,需要翻译以下内容的标题和正文:-

class Page extends AppModel {

    public $actsAs = array(
        'Translate' => array(
            'title',
            'body'
        )
    );
其思想是,当在子域上创建页面时,我们希望它为每种语言创建页面的版本。因此,如果在en.example.com上创建了一个页面,则同时会创建一个法语版本。我尝试在Page::afterSave()方法中执行此操作,但它没有将替代转换保存到i18n表:

public function afterSave($created, $options=array()) {

    parent::afterSave($created, $options);

    if ($created) {

        $this->locale = $this->locale=='eng' ? 'fre' : 'eng';
        $this->save($this->data, false, array('callbacks' => false));

    }

    return;

}

有什么建议吗?

Hi,只是关于引导部分的一个想法:这样,当添加更多语言时,您可以更轻松地扩展它:)@Jelmer谢谢,我已经在考虑这些问题了。我试图让我的示例代码保持简单,因为我的问题是在创建内容时保存所有语言的翻译。我真正的应用程序比两种语言更复杂,但这正是我目前的工作重点,直到我能让它工作为止。当你调试
$this->locale
$this->data
时会发生什么?是不是已经定了?它甚至会进入if语句的“内部”吗?错误日志怎么说?当您编辑而不是创建时会发生什么?$this->data的内容到底是什么?$options的内容是什么,可能是阻止了什么?只是一些可能给你一些思考的问题:)你试过橡皮鸭法吗?;-)它肯定包含在保存新内容的if语句中$此->区域设置为“fre”或“eng”,具体取决于我从中保存的域$这个->数据已经设置好了,但我也尝试过用虚拟标题和主体值保存一个集合数组;同样,它没有保存任何东西。我想我可能需要开始挖掘核心蛋糕代码,看看引擎盖下发生了什么。