语言更改取决于登录用户

时间:2019-02-14 14:03:36

标签: php symfony events translation symfony4

我需要根据用户实体中存储的数据进行翻译。 例如,我有带有“语言”列的“用户”实体。如果用户具有EN,则需要将视图翻译成英语等。登录后,我需要检查用户具有哪种类型的语言并加载翻译后的视图。

如果我该怎么做,该https://symfony.com/doc/current/event_dispatcher.html该使用吗?

我曾尝试在IF语句中使用Locale setDefault函数进行某些操作,但此方法无效。

我的translation.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 :(得分:0)

是的,EventDispatcher是必经之路。您很可能希望为此使用kernel.request事件。如果您需要登录用户使用的语言,则在调用侦听器时必须小心,因为它必须在加载登录用户的Firewall-EventSubscriber之后运行。您可以通过指定优先级来控制顺序。

然后,在您的监听器中,您应该能够获取用户及其语言,并覆盖Request上的_locale属性或为其添加您自己的属性。您也可以在会话中存储此信息,因此不必在每个请求中都查询用户。您可以在StackOverflow上找到相关示例,例如here