【问题标题】:Symfony validation messages always in default localeSymfony 验证消息总是在默认语言环境中
【发布时间】: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 showphp bin/console about 命令,你会看到完整的Symfony 版本,我稍后会看这个
  • 关于你的问题,Symfony 已经有一个 LocaleListener 通过_locale 属性配置当前的语言环境。你能显示这些路径的 Route 配置吗?

标签: php symfony internationalization symfony5


【解决方案1】:

如果您已将侦听器添加到内核响应,请确保它在其他侦听器之前运行,并为其赋予更高的优先级。默认优先级为 0,即最后运行。

我遇到了和你一样的问题,通过将内核侦听器的优先级更改为 127 来解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2016-09-07
    • 2014-03-31
    相关资源
    最近更新 更多