Привет. Я пытаюсь добавить поддержку нескольких языков в свое приложение symfony, так как 3 дня безуспешно.
Я хочу обрабатывать URL-адреса в зависимости от предпочтений локали пользователя и добавлять ссылку для переключения языка, когда не вошел в систему .
Все, что я пробовал, не работало, наверное, я делаю что-то не так.
Я хочу изменить два языка: французский и английский sh. myapp.com/fr/contactez-nous
и myapp.com/en/contact-us
, например.
app / config / config.yml
parameters:
locale: fr
framework:
translator: { fallbacks: ["%locale%"] }
default_locale: '%locale%'
app / config / routing.yml
locale:
resource: "@StandardBundle/Controller/"
type: annotation
requirements:
_locale: fr|en
defaults: { _locale: '%locale%' }
Контроллер
/**
* @Route("/{_locale}/contactez-nous", name="contact_fr")
* @Route("/{_locale}/contact-us", name="contact_en")
*/
public function contactAction(){
}
Работает как положено даже на языке переключение с помощью этого в вид моей ветки
{% if app.request.locale == "en" %}
<a class="nav-link" href="{{ path(app.request.get('_route'),
app.request.get('_route_params')|merge({'_locale': 'fr'})) }}">Français</a>
{% else %}
<a class="nav-link" href="{{ path(app.request.get('_route'),
app.request.get('_route_params')|merge({'_locale': 'en'})) }}">English</a>
{% endif %}
Все хорошо, но когда я вхожу в систему с пользователем, языковой стандарт которого en
, symfony не применяет никаких изменений.
Вот как мой пользователь вошел в систему
app / config / security.yml
firewalls:
main:
pattern: ^/
anonymous: true
guard:
authenticators:
- guardAuthenticator
src / MyBundle / Ressources / config / services.yml
services:
guardAuthenticator:
class: MyBundle\Security\LoginFormAuthenticator
autowire: true
MyBundle \ Security \ LoginFormAuthenticator
class LoginFormAuthenticator extends AbstractFormLoginAuthenticator
{
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
$user = $token->getUser();
$idUtil = $user->getId();
$session->set('_locale', $user->getLocale());
/*
* ALSO TRIED THIS
* but after logged in request is not updated :(
/*
$request->setLocale($user->getLocale());
$session->set('_security_main', serialize($token));
$session->save();
}
}
Я попробовал это Создание локали "Липкой" во время сеанса пользователя и многие другие решения, найденные в Google безуспешно.
И когда я выхожу, я перенаправляю здесь
не myapp.com/app_dev.php/fr
с ассоциированным контроллером
/**
* @Route("/{_locale}/", name="home")
*/
public function HomeAction()
{
}
Я должен ввести локаль в адресной строке вручную.
Я буду очень признателен за любую помощь по этому вопросу, и это начнёт сводить меня с ума из-за чего-то такого простого, без всяких рамок, спасибо.