내 웹 사이트에서 Symfony, 마스터 버전을 실행 중입니다. 지금까지 웹 사이트에서 LocalListener logic을 사용할 수 있었지만 코드가 내 버전과 호환되지 않기 때문에 약간의 차이가있었습니다. these paths를 사용하여,첫 번째 요청시 사용자 로캘이 작동하지 않습니다.
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if (!$request->hasPreviousSession()) {
return;
}
if ($locale = $request->get('_locale')) {
$request->getSession()->set('_locale', $locale);
}
$request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
}
그런 식으로, 내 페이지에서 간단한 언어 선택을 넣을 수 있고, 새로운 언어는 첫 번째 요청에 적용됩니다 : (내 생각) 나는 단지 onKernelRequest 방법이 방법을 단순화 . ("else"조건을 해제해도 발생하지 않을 것입니다.)
그런 다음 사용자가 로그인하고 프로필에 로케일을 지정한 경우 사용자 계정에 저장된 로캘을 고려하고 싶습니다.
가 가 이
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if (!$request->hasPreviousSession()) {
return;
}
$token = $this->container->get('security.context')->getToken();
if (is_object($token)) {
$user = $token->getUser();
if (is_object($user)) {
$userlocale = $user->getLocale();
if ($userlocale) {
$request->getSession()->set('_locale', $userlocale);
$request->setLocale($userlocale);
return;
}
}
}
if ($locale = $request->get('_locale')) {
$request->getSession()->set('_locale', $locale);
}
$request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
}
(편집 : 죄송 가난한 들여 쓰기, 어떻게 든 유래 ... 제대로 들여 쓰기하지 않음) 사용자가
는 기본적으로이 확인하는 경우 그래서 함수에서이 코드 조각을 추가 로그인되어있는 경우, 사용자가 로케일을 설정했는지 여부를 판별 한 경우 로케일을 사용자 로케일로 설정합니다. 이제는 작동하지만, 즉시 .... 내 프로필에 로그인하거나 로케일을 변경할 때마다 내가 얻을 수있는 다음 페이지는 이전에 설정된 로케일에 계속 남아 있습니다. 새 페이지를로드 할 때만 번역이 제대로 변경되고 다음 요청에 대해 그대로 유지됩니다.
여기 내 질문이 있습니다.이 변경 사항을 게시 후 로그인 및 프로필 편집 후 요청에 적용하기 위해 추가해야 할 사항이 있습니까?
하지만처럼 작동하지만 나는 번들이 사용자 로케일을 처리하지 생각하지 않는다 ... 그래서 i18n 번들의 요청은 항상 사용자의 로케일을 무시합니다. 물론 i18n 번들을 동작시키는 방법에 대한 아이디어가 있고 그에게 말하면 사용자 로케일을 덮어 쓰지 않아도됩니다. – SylvainB
같은 방식으로 : 사용자 로케일이 다른 경우 다른 로케일로 리디렉션합니다. –
어디에서, 듣는 사람? 거기에있는 경로를 추적 할 수 있습니까? – SylvainB