Как мне использовать TranslateBehavior в CakePHP?
Вопрос
Документации по cakephp.org нет, и я не могу найти ее в Google.Пожалуйста, свяжите мне какую-нибудь документацию или предоставьте ее!
Решение
Поведение перевода - еще одна из очень полезных, но плохо документированных функций CakePHP.Я реализовывал это пару раз с разумным успехом на многоязычных веб-сайтах следующим образом.
Во-первых, поведение translate приведет только к интернационализации содержимого базы данных вашего сайта.Если у вас есть еще какой-нибудь статичный контент, вы захотите взглянуть на Cake __('string')
функция-оболочка и 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.Finds будет выполнять поиск на основе текущей локали, установленной в браузере пользователя, возвращая массив типа:
[Content]
[id]
[titleTranslation]
[bodyTranslation]
Мы используем отличные компонент p28n реализовать решение для переключения языка, которое довольно хорошо работает с поведением gettext и translate.
Это не идеальная система - поскольку она создает отношения HABTM "на лету", это может вызвать некоторые проблемы с другими отношениями, которые вы, возможно, создали вручную, но если вы будете осторожны, она может работать хорошо.
Другие советы
Для тех, кто ищет одно и то же, cakephp обновил свою документацию.Для Перевода поведения перейдите по ссылке вот..