我将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'
答案 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;
}