CakePHP TranslateBehavior сводит меня с ума - PullRequest
2 голосов
/ 12 июля 2010

Я использую CakePHP 1.3.2 с интегрированным поведением перевода.

Переводы Я сохраняю несколько своих моделей в каждой таблице.Пример:

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

Теперь после вставки некоторых строк данных.Cake больше не получает данные i18n в index-action.SQL-дамп выглядит так:

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

Но в таблице "page_i18ns" поле локали заполнено ' deu '

Почему Cake смешиваетатрибут локали?Где я должен установить атрибут локали?Где-нибудь в классе Model?

В моем AppController я установил язык с помощью Configure::write('Config.language', $lang); в функции beforeFilter() .... 'eng', 'deu', 'chi'

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Это действительно раздражает. 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;
}
1 голос
/ 15 июля 2010

У меня есть следующий код в моем ArticleController:

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

Посмотрите, поможет ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...