【发布时间】:2020-05-31 15:55:12
【问题描述】:
因此,我已根据 URL 中的语言环境将网站配置为具有多个语言环境,例如:
http://127.0.0.1:8000/signup/es/
http://127.0.0.1:8000/signup/en/
我有一个 LocaleSubscriber,如下所示:
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
/* If first request */
if (!$request->hasPreviousSession()) {
/* Set locale in session (locale from URL) */
// ...
}
return;
}
这对除了验证消息之外的所有内容都适用。 翻译存储如下:
/translations/messages.en.yaml
/translations/messages.es.yaml
/translations/validators.en.yaml
/translations/validators.es.yaml
我唯一能确定的就是我在这里设置的默认语言环境:
/config/packages/translation.yaml
例如:
framework:
default_locale: es
translator:
default_path: '%kernel.project_dir%/translations'
fallbacks:
- es
那么验证消息将始终位于 那个 语言环境中,在本例中为 ES。 所有其他翻译工作正常。 我在这里错过了什么吗? 看起来翻译未配置为使用会话“_locale”变量或类似的东西。 有什么想法吗?
编辑: 添加路由配置:
* @Route(
* "/signup/{_locale}/",
* locale="en",
* requirements={
* "_locale": "en|fr|de|es|it"
* },
* name="signup",
* methods={"GET"}
* )
编辑: 内核请求正文应如下所示:
if ($locale = $request->attributes->get('_locale')) {
$request->getSession()->set('_locale', $locale);
} else {
$request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
}
所以会话 _locale 变量没有按预期在每个请求上更新。 感谢各位帮我解决问题!
【问题讨论】:
-
5.2?它还没有发布。你的意思是 5.2-dev 吗?顺便说一句,最新版本是 5.1(今天发布:))。我需要您使用的确切版本才能正确重现问题。
-
我会在验证发生之前检查您的请求和会话所持有的语言环境,那里可能没有正确设置某些内容。 (这就是我能说的,除了清除缓存,你可能已经完成了)
-
@yceruto 根据作曲家的说法:“symfony/framework-bundle”:“5.0.*”,我相信它是 5.0.8
-
尝试使用
composer show或php bin/console about命令,你会看到完整的Symfony 版本,我稍后会看这个 -
关于你的问题,Symfony 已经有一个 LocaleListener 通过
_locale属性配置当前的语言环境。你能显示这些路径的 Route 配置吗?
标签: php symfony internationalization symfony5