我需要根据用户实体中存储的数据进行翻译。 例如,我有带有“语言”列的“用户”实体。如果用户具有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
答案 0 :(得分:0)
是的,EventDispatcher是必经之路。您很可能希望为此使用kernel.request
事件。如果您需要登录用户使用的语言,则在调用侦听器时必须小心,因为它必须在加载登录用户的Firewall-EventSubscriber之后运行。您可以通过指定优先级来控制顺序。
然后,在您的监听器中,您应该能够获取用户及其语言,并覆盖Request上的_locale
属性或为其添加您自己的属性。您也可以在会话中存储此信息,因此不必在每个请求中都查询用户。您可以在StackOverflow上找到相关示例,例如here