CakePHP TranslateBehavior让我发疯

时间:2010-07-12 17:11:01

标签: cakephp internationalization

我将CakePHP 1.3.2与集成的翻译行为结合使用。

翻译我在每张表中保存了几个模型。例如:

class Page extends AppModel {
    var $name = 'Page';
    var $actsAs = array(
        'Translate' => array('title', 'subtitle', 'menu')
    );
    var $translateModel = 'PageI18n';
...
}

现在插入一些数据行后。 Cake不再检索索引操作中的i18n数据。 SQL-dump看起来像这样:

... WHERE I18n__title.locale = 'de_de' ...

但是在“page_i18ns”表中,语言环境字段填充了“ deu

为什么Cake混合了locale属性?我应该在哪里设置locale属性?在Model类的某个地方?

在我的AppController中,我在Configure::write('Config.language', $lang);函数中设置了beforeFilter()的语言....'eng','deu','chi'

2 个答案:

答案 0 :(得分:1)

我在ArticlesController中有以下代码:

function beforeFilter() {
    parent::beforeFilter();
    $this->Article->locale = $this->Session->read('Config.language');
}

看看是否有帮助。

答案 1 :(得分:1)

确实很讨厌CakePHP使用的是语言环境而不是i18n表中的语言 他们可能会修复这个错误,但可能性很小,因为修复这个错误会破坏所有现有的i18n应用程序。

所以我写了一个小帮助函数,将languageCode转换为语言环境:

/**
 * Retrieve the "locale" from the language code (for i18n table)
 * Examples: en -> eng, en-us -> en_us, de -> deu, nl -> dut
 *
 * @param string $language
 * @return string
 */
function convertLanguageToLocale($language) {
    $i18n =& I18n::getInstance();
    $i18n->l10n->get($language);
    return $i18n->l10n->locale;
}