根据登录用户的登录方式更改语言



我需要将翻译取决于存储在用户实体中的数据。例如,我的用户实体带有列语言。如果用户有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%'

和我的服务.yaml

parameters:
locale: ru
app_locales: ru|uk

是的,EventDisPatcher是必经之路。您很可能想为此使用kernel.request-事件。如果您需要从登录的用户中使用的语言,则必须在调用侦听器时要小心,因为它必须在加载登录用户的FireWall-Eventsubscriber之后运行。您可以通过指定优先级来控制订单。

在您的侦听器中,您应该能够获取用户及其语言,并在请求上覆盖_locale属性或为其添加您自己的属性。您也可以将此信息存储在会话中,因此您无需在每个请求时向用户查询。您可以在stackoverflow上找到此示例,例如这里

最新更新