首页 > 解决方案 > 根据登录用户更改语言

问题描述

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

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

我曾尝试在 IF 语句中使用 Locale setDefault 函数做一些事情,但它不起作用。

我的翻译.yaml:

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

还有我的 services.yaml

parameters:
locale: ru
app_locales: ru|uk

标签: phpsymfonyeventstranslationsymfony4

解决方案


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

在您的侦听器中,您应该能够获取用户及其语言并覆盖_locale请求上的属性或为其添加您自己的属性。您还可以将此信息存储在会话中,因此您不必在每个请求上查询用户。你可以在 StackOverflow 上找到这方面的例子,例如这里


推荐阅读