php - Symfony 3.4 如何设置语言环境
问题描述
使用 symfony 3.4,我使用比symfony 文档LocaleListener
中描述的优先级更高的事件监听器来设置语言环境:
namespace AppBundle\EventListener;
use AppBundle\Component\Common;
use AppBundle\Entity\Client;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class EventListener
{
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
public function onKernelRequest(GetResponseEvent $event)
{
if ($this->entityManager !== null) {
$client = Common::getClient($this->entityManager);
$event->getRequest()->setLocale($client->getDefaultLocale());
}
}
}
现在据我了解,要在树枝模板中获取语言环境,我使用
{{ app.request.locale }}
它输出我通过 EventListener 设置的语言环境(即en
)。但我也在我登录页面的对象getDisplayLocale()
上实现了该方法。Member
这里的想法是,如果没有登录,则应使用客户端的默认区域设置,如果已登录,则应使用成员的区域设置。现在成员语言环境是de
.
我现在不明白的连线事情是,页面实际上是用德语呈现的,symfony 状态栏显示德语,即使树枝模板变量{{ app.request.locale }}
显示en
:
为什么 symfony 状态栏中显示的变量和 from{{ app.request.locale }}
不一样?如何在 EventListener 的树枝模板中设置实际用于翻译的变量?
解决方案
推荐阅读
- javascript - 显示何时交付订单并禁用无法在 react-datepicker 中进行交付的天数
- ansible - 如何在提供动态值的ansible中循环主机组
- amazon-web-services - CloudFormation !Select with !Split function with load balancer arn
- swiftui - 如何使用 LazyVGrid 或 LazyHGrid 根据大小获取显示的内容?
- android - Android 应用程序 - ChromeOS 上的文件访问失败
- php - Codeigniter ORM 功能等价物
- batch-file - 输出变量上的 CMD 子字符串提取
- vb.net - 完全删除重复行
- file - 如何使用颤振同步(无等待)从资产文件夹中读取文件
- docker - 无法创建 docker 容器