【问题标题】:CakePHP TranslateBehavior is driving me crazyCakePHP TranslateBehavior 快把我逼疯了
【发布时间】:2011-03-14 22:04:24
【问题描述】:

我使用带有集成翻译行为的 CakePHP 1.3.2。

我将我的几个模型保存在每个表中的翻译。示例:

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

现在在插入一些数据行之后。 Cake 不再检索 index-action 中的 i18n-data。 SQL 转储如下所示:

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

但在“page_i18ns”表中,区域设置字段填充了“deu

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

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

【问题讨论】:

  • 我知道 Cake 和语言环境,但没有使用翻译行为。我只是想提一下,区域设置标识符确实看起来像 en_en、de_de 等,而不像 eng 或 deu。

标签: cakephp internationalization


【解决方案1】:

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

所以我写了一个小助手函数,将语言代码翻译成语言环境:

/**
 * 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;
}

【讨论】:

    【解决方案2】:

    我的 ArticlesController 中有以下代码:

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

    看看有没有帮助。

    【讨论】:

    • 谢谢奥斯卡。在我的例子中: $this->Article->locale = Configure::read('lang');
    猜你喜欢
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多