Смена языка в зависимости от авторизованного пользователя - PullRequest
0 голосов
/ 14 февраля 2019

Мне нужно сделать перевод зависимым от данных, хранящихся в сущности пользователя.Например, у меня есть сущность пользователя с колонкой Language.Если у пользователя есть EN, мне нужно перевести представления на английский и т. Д. После входа в систему мне нужно проверить, какой тип языка имеет пользователь, и загрузить переведенное представление.

Должен ли я использовать для этого https://symfony.com/doc/current/event_dispatcher.html, если я делаю, как я должен это сделать?

Я пытался сделать что-то с помощью функции setDefault Locale в выражении IF, но это не работает.

Мой перевод.yaml:

framework:
default_locale: '%locale%'
translator:
    default_path: '%kernel.project_dir%/translations'
    fallbacks:
        - '%locale%'

И мой services.yaml

parameters:
locale: ru
app_locales: ru|uk

1 Ответ

0 голосов
/ 14 февраля 2019

Да, EventDispatcher - это путь.Скорее всего, вы хотите использовать kernel.request -event для этого.Если вам нужен язык от вашего вошедшего в систему пользователя, вы должны быть осторожны, когда ваш слушатель вызывается, так как он должен запускаться после Firewall-EventSubscriber, который загружает вошедшего в систему пользователя.Вы можете контролировать порядок, указав приоритет.

В своем слушателе вы сможете выбрать пользователя и его язык и перезаписать атрибут _locale в запросе или добавить свой собственный атрибут для него.Вы также можете сохранить эту информацию в сеансе, чтобы вам не приходилось запрашивать пользователя при каждом запросе.Вы можете найти примеры для этого в StackOverflow, например, здесь

...