я прав

книга злого кровавого демона

Translate Behavior

5 комментариев

Блог переехал

Реклама

Written by evilbloodydemon

2009/01/20 в 14:33

Опубликовано в cakephp

Tagged with , ,

комментариев 5

Subscribe to comments with RSS.

  1. Что-то я не понял. Если в таблице Dynapage два поля — id,tag — то откуда берутся переводы?
    Или Dynapage ссылается на другую таблицу? Что будет в полях content, title? Они из чего создаются?

    Влад

    2009/01/23 at 17:11

  2. Ну таблицу интернационализации мы ж не просто так создавали. Мы передаем при инициализации модели параметры для Translate Behavior — content, title — и оно само разбирается какие из пришедших от пользователя данных к какой таблице относятся. id, tag будут сохранены в dynapage, а content и title — в i18n c указанием того в какой локали они сохранены и к какой модели относятся.
    При выборке из базы Translate добавляет в запрос выборки из этой таблицы с учетом текущей локали. А с точки зрения пользователя все выглядит как будто это одна таблица (Dynapages в данном случае).

    evilbloodydemon

    2009/01/24 at 10:12

  3. Самое обидное, что нельзя сделать сортировку (paginate) по полю, которое находится внутри l18n content. ;-(

    И это делает использование этого бихейвора практически бессмысленным 😦

    Влад

    2009/05/14 at 15:31

  4. Как сделать переключение языков на сайте?
    У меня app_controller.php выглядит так: Код:
    0, ‘ua’ => 1);
    var $uses = array(‘Category’, ‘Article’, ‘Dictionary’);

    function beforeFilter() {
    if (strpos($this->here, ‘/admin’) === 0) {
    $this->layout = ‘admin’;
    if (!$this->Session->check(‘admin_id’) && strpos($this->here, ‘/admin/users/login’) !== 0) {
    $this->redirect(‘/admin/users/login’);
    exit;
    }
    }
    else {
    $this->_setCurrentLang();
    $this->Category->recursive = 1;
    $fields = ‘Category.id, Category.’ . LNG . ‘_title, Article.’ . LNG . ‘_title, Article.’ . LNG . ‘_description, Article.id, Article.image’;
    $this->set(‘right_articles’, $a = $this->Category->Article->find(‘all’, array(‘conditions’ => ‘parent_id = 0 and persistent = 1’, ‘order’ => ‘Article.created DESC’, ‘fields’ => $fields)));
    $this->Category->recursive = -1;
    $this->set(‘categories’, $cats = $this->Category->find(‘threaded’, array(‘fields’ => array(‘id’, ‘onTop’, ‘parent_id’, LNG . ‘_title’), ‘order’ => ‘lft ASC’)));
    $words = $this->Dictionary->findAll(null, array(‘id’, ‘tag’, LNG . ‘_word’));
    $n_w = array();
    foreach ($words as $w) {
    $n_w[$w[‘Dictionary’][‘tag’]] = $w[‘Dictionary’][LNG . ‘_word’];
    }
    $this->set(‘words’, $n_w);
    }
    }

    function _setCurrentLang() {
    $host = str_replace(‘www.’, », $this->Session->host);
    $cLang = substr($host, 0, strpos($this->Session->host, ‘.’));
    if (isset($this->languages[$cLang])) {
    define(‘LANG’, $this->languages[$cLang]);
    $host = str_replace(«$cLang.», », $host);
    }
    else {
    define(‘LANG’, 0);
    }
    $this->langs = array_flip($this->languages);
    define(‘LNG’, $this->langs[LANG]);
    $this->set(‘host’, $this->langs[(LANG + 1)%2] . «.$host» . $this->here);
    }
    }
    ?>

    В даном случаи сайт на русском языке.
    Когда я меняю Код:
    var $languages = array(‘ru’ => 0, ‘ua’ => 1);
    на Код:
    var $languages = array(‘ru’ => 1, ‘ua’ => 0);
    сайт становится на украинском языке.
    Как сделать чтобы было переключение для посетителей на сайте?

    Николай

    2011/03/18 at 21:16

  5. echo $html->link(‘Русский’, array(‘language’=>’rus’));
    echo $html->link(‘Eng’, array(‘language’=>’eng’));

    а в контроллере, в бефоррендер, считывай параметр language

    Anna

    2011/03/31 at 17:51


Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: