私はSymfony 2.6.0を使用します デフォルト言語の代わりにユーザの言語を設定する必要があります。 サービスロケールを変更するには:Symfony 2.6.0のデフォルト言語を変更するには
helper.interactive_login_listener:
class: HelperBundle\Listeners\LanguageListener
calls:
- [ setSession, [@session] ]
tags:
- { name: kernel.event_listener, event: security.interactive_login, method: setLocaleForAuthenticatedUser }
helper.language.kernel_request_listener:
class: HelperBundle\Listeners\LanguageListener
tags:
- { name: kernel.event_listener, event: kernel.request, method: setLocaleForUnauthenticatedUser }
コード:
namespace HelperBundle\Listeners;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;
class LanguageListener
{
private $session;
public function setSession(Session $session)
{
$this->session = $session;
}
/**
* kernel.request event. If a guest user doesn't have an opened session, locale is equal to
* "undefined" as configured by default in parameters.ini. If so, set as a locale the user's
* preferred language.
*
* @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
*/
public function setLocaleForUnauthenticatedUser(GetResponseEvent $event)
{
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
return;
}
$request = $event->getRequest();
$request->setLocale('ru');
}
/**
* security.interactive_login event. If a user chose a language in preferences, it would be set,
* if not, a locale that was set by setLocaleForUnauthenticatedUser remains.
*
* @param \Symfony\Component\Security\Http\Event\InteractiveLoginEvent $event
*/
public function setLocaleForAuthenticatedUser(InteractiveLoginEvent $event)
{
$this->session->set('_locale', 'ru');
}
}
設定:コントローラで
framework:
translator: ~
default_locale: ~
:
namespace HelperBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
abstract class PrototypeController extends Controller
{
protected $model;
protected $flashBag;
//Метод загрузки модели контроллера
abstract function loadServiceModelEvent($model_service_name);
//Вывод шаблона
protected function renderPage($template, $response)
{
print $this->get('request')->getLocale().'==';
print $this->get('request')->getSession()->get('_locale'); die();
結果の印刷:
ru==ru
同時に、英語(en)が使用されます。 ただし、設定されている場合
framework:
translator: ~
default_locale: ru
すべては問題ありません。 言語を変更するには? ありがとうございました!
を? – eRIZ
デフォルトのロケールを使用します。 "ru"ロケールは有効化されていません。私の英語には申し訳ありません。 –