Я использую Cakephp 3.0.0-RC2. Это нормально, но я не могу изменить язык пользователя при входе в систему.
Моя функция входа в систему не работает. Он ничего не делает:
public function login() { if ($this->request->is('post')) { $user = $this->Auth->identify(); if ($user) { $this->Auth->setUser($user); I18n::locale($user['lang']); return $this->redirect($this->Auth->redirectUrl()); } $this->Flash->error(__("Nom d'utilisateur ou mot de passe incorrect, essayez à nouveau.")); } }
Обратите внимание, что когда я меняю язык в bootstrap, то есть ini_set ('intl.default_locale', 'fr_FR'); он отлично работает, но я хочу изменить язык при входе пользователя в систему. Мой рабочий стол запускает Wampserver с PHP 5.5.2 в Windows 8.1. Я проверяю функцию gettext независимо от Cakephp. Il работает, но только после загрузки на https://launchpad.net/php-gettext/
Вы можете мне помочь ? Кристиан
Потому что вы перенаправляетесь на другой контроллер. Это означает, что локаль может быть переопределен в этом контроллере или AppController. Почему вы не используете сеанс?
public function login() { if ($this->request->is('post')) { $user = $this->Auth->identify(); if ($user) { $this->Auth->setUser($user); $this->request->session()->write('Config.language', 'du'); return $this->redirect($this->Auth->redirectUrl()); } $this->Flash->error(__("Nom d'utilisateur ou mot de passe incorrect, essayez à nouveau.")); } }
И в вашем AppController (FrontController)
class AppController extends Controller { public function initialize() { $this->loadComponent('Flash'); $this->layout = 'mysite'; $lang=$this->request->session()->read('Config.language'); switch($lang) { case "du": I18n::locale('du_DU'); break; case "en": I18n::locale('en_EN'); break; case "jp": I18n::locale('ja_JP'); break; default: I18n::locale('en_EN'); break; }