CakePHP 3.x Локализация
Создать действие для динамического изменения языка
Маршрут
$routes->connect('/locale', ['controller' => ' Users', 'action' => 'languageChange']);
Действие контроллера
UsersController
use Cake\Http\Session;
use Cake\I18n\I18n;
//Before filter in users controller
public function beforeFilter(\Cake\Event\Event $event)
{
parent::beforeFilter($event);
}
/**
* Change language
*/
public function languageChange()
{
if ($this->request->is('post')) {
$session = $this->getRequest()->getSession();
if (!empty($this->request->getData('locale'))) {
$session->write('Config.language', $this->request->getData('locale'));
$this->redirect($this->referer());
} else {
$session->write('Config.language', I18n::getLocale());
$this->redirect($this->referer());
}
}
}
Создать файл представления означает файл language_change.ctp
<?php
echo $this->Form->create("Localizations", array('url' => '/locale'));
echo $this->Form->radio("locale", [
['value' => 'en_US', 'text' => 'English'],
['value' => 'de_DE', 'text' => 'German'],
['value' => 'fr_FR', 'text' => 'French'],
]);
echo $this->Form->button('Change Language');
echo $this->Form->end();
?>
<h2><?php echo __('Hello'); ?></h2>
<h2><?php echo __('How are you?'); ?></h2>
<h2><?php echo __('Wel Come'); ?></h2>
<h2><?php echo __('Good Job'); ?></h2>
- Этот поток выполнения
- Смена языка действия первого вызова, например: http://example.local/locale
- Затем поменяйте язык, выберите переключатель и поменяйте язык
AppController
use Cake\I18n\I18n;
use Cake\Http\Session;
use Cake\Core\Configure;
public function beforeFilter(Event $event)
{
$session = $this->getRequest()->getSession();
if ($session->check('Config.language')) {
I18n::setLocale($session->read('Config.language'));
} else {
$session->write('Config.language', I18n::getLocale());
}
}
Создать это местоположение в файлах
SRC / Locale / en_US / default.po
msgid "Hello"
msgstr "Hello"
msgid "How are you?"
msgstr "How are you?"
msgid "Wel Come"
msgstr "Wel Come"
msgid "Good Job"
msgstr "Good Job"
ЦСИ / Locale / de_DE / default.po
msgid "Hello"
msgstr "Hallo"
msgid "How are you?"
msgstr "Hoe gaat het met je?"
msgid "Wel Come"
msgstr "Wel kom"
msgid "Good Job"
msgstr "Goed gedaan"
Настройка в boostrap.php
'Session' => [
'defaults' => 'php',
'language' => 'en_US'
]