Как использовать TranslateBehavior в CakePHP?

На cakephp.org нет документации, и я не могу найти ее в Google. Пожалуйста, свяжите мне какую-нибудь документацию или предоставьте ее!


person Alexander Morland    schedule 18.09.2008    source источник


Ответы (2)


Поведение при переводе - еще одна очень полезная, но плохо документированная функция CakePHP. Я несколько раз реализовал это с разумным успехом на многоязычных веб-сайтах в следующих направлениях.

Во-первых, поведение перевода будет интернационализировать только содержимое базы данных вашего сайта. Если у вас есть еще статический контент, вы захотите взглянуть на функцию-оболочку Cake __('string') и gettext (есть полезная информация об этом здесь)

Предполагая, что есть Contents, который мы хотим перевести со следующей таблицей db:

CREATE TABLE `contents` (
    `id` int(11) unsigned NOT NULL auto_increment,
    `title` varchar(255) default NULL,
    `body` text,
  PRIMARY KEY  (`id`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

Тогда модель content.php имеет:

var $actsAs = array('Translate' => array('title'   => 'titleTranslation',
                     'body'    => 'bodyTranslation'
                     ));

в его определении. Затем вам нужно добавить таблицу i18n в базу данных следующим образом:

CREATE TABLE `i18n` (
  `id` int(10) NOT NULL auto_increment,
  `locale` varchar(6) NOT NULL,
  `model` varchar(255) NOT NULL,
  `foreign_key` int(10) NOT NULL,
  `field` varchar(255) NOT NULL,
  `content` mediumtext,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

Затем, когда вы сохраняете данные в базе данных в вашем контроллере, установите языковой стандарт на нужный вам язык (этот пример будет для польского):

$this->Content->locale = 'pol';
$result = $this->Content->save($this->data);

Это создаст записи в таблице i18n для полей заголовка и тела для языкового стандарта pol. Поиск будет выполняться на основе текущего языкового стандарта, установленного в браузере пользователя, и возвращает массив, например:

[Content]
  [id]
  [titleTranslation]
  [bodyTranslation]

Мы используем отличный компонент p28n для реализации решения для переключения языков, которое очень хорошо работает с поведением gettext и translate.

Это не идеальная система - поскольку она создает отношения HABTM на лету, это может вызвать некоторые проблемы с другими отношениями, которые вы, возможно, создали вручную, но если вы будете осторожны, она может хорошо работать.

person David Heggie    schedule 19.09.2008
comment
благодаря. даже узнать имя и поля таблицы i18n было сложно ... поговорить о скрытых функциях ... - person Alexander Morland; 19.09.2008
comment
@AlexanderMorland запустите эту команду из папки приложения проекта ./Console/cake i18n. Эта команда может инициализировать таблицу i18n и извлечь все переводы из вашего приложения в файл локали. - person Ish; 29.01.2013

Для тех, кто ищет то же самое, cakephp обновил свою документацию. Чтобы узнать о поведении переводчика, перейдите здесь ..

person Sp0T    schedule 28.02.2014