Как мне использовать TranslateBehavior в CakePHP? - PullRequest
4 голосов
/ 18 сентября 2008

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

Ответы [ 2 ]

13 голосов
/ 19 сентября 2008

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

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

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

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 для полей title и body для локали pol. Поиск найдет, основываясь на текущем языковом стандарте, установленном в браузере пользователя, возвращая массив, например:

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

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

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

0 голосов
/ 28 февраля 2014

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

...