php - 根据登录用户更改语言
问题描述
我需要根据存储在用户实体中的数据进行翻译。例如,我有带有列语言的用户实体。如果用户有 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
解决方案
是的,EventDispatcher 是要走的路。您很可能希望为此使用kernel.request
-event。如果您需要登录用户的语言,则在调用侦听器时必须小心,因为它必须在加载登录用户的 Firewall-EventSubscriber 之后运行。您可以通过指定优先级来控制顺序。
在您的侦听器中,您应该能够获取用户及其语言并覆盖_locale
请求上的属性或为其添加您自己的属性。您还可以将此信息存储在会话中,因此您不必在每个请求上查询用户。你可以在 StackOverflow 上找到这方面的例子,例如这里
推荐阅读
- java - 使用对象列表构建树
- asp.net-core - AspNet Core 2.0 Windows 服务和唯一的 ASPNETCORE_ENVIRONMENT 变量
- c++ - EXPECT_CALL 用于具有 unique_ptr 引用类型参数的模拟函数
- performance - 与 foldr 相比,模式匹配的性能更好
- codenameone - Codename One TextArea Padding 无效
- android - 按钮上的 setPadding() 以编程方式不起作用
- python - 存储利率和复利计算总和的数据类型是什么?
- python - 日元的算法实现不选择最短路径
- php - 检查空函数参数的更好方法
- php - 不支持社交名流驱动程序 [VKontakte]