Symfony 4 中的表单会自动使用翻译吗?

Do forms automatically use translation in Symfony 4?

我正在努力将应用程序从 Symfony 3 升级到 Symfony 4。

我注意到新版本的探查器在我的一条具有表单的路线上存在一些错误。错误在翻译 -> 翻译消息 -> 缺失:

These messages are not available for the given locale and cannot be found in the fallback locales. Add them to the translation catalogue to avoid Symfony outputting untranslated contents.

每个表单字段都列在丢失的消息下。

我在旧版本中没有做任何翻译,所以我想知道为什么新版本需要翻译。这是现在自动与表单关联的东西吗?如果是这样,有没有办法将其关闭?这个应用程序真的没有必要。

您应该 disable 翻译 Form 如下:

$builder
    ......
    ......
    ->add('budget', MoneyType::class, array(
          'label_attr' => array('class' => 'control-label'),
          'attr' => array('class' => 'span11'),
          ...
          'translation_domain' => false
    ))
    ......
    ......
    ;

当您在框架包中启用翻译时,Forms 将尝试通过自动注册的 TranslationExtension 使用它们。如果您不需要任何翻译,您可以禁用它们。请注意,表单上的验证错误将作为翻译密钥返回,而不是消息。

在 Symfony 3 中,设置应该在 app/config/config.yml 中,在 Symfony 4 目录结构中,它们应该在 config/packages/framework.yamlconfig/packages/translation.yaml 下:

framework:
    translator: ~ # just set this to false if you don't want any translations to be used

您的另一个选择是阻止 TranslationExtension 被注册或 write a custom form extension that sets the translation_domain on the abstract FormType to false

另一种选择是忽略缺少翻译的通知。由于翻译已缓存,并且始终会回退到键(在您的情况下是实际标签),因此不会产生任何性能影响或其他负面影响。

编辑:关于你的最后一个问题,我不认为这种行为从 Symfony 3 到 4 有太大变化,你应该以前见过类似的行为。我猜你只是之前没有注意到警告,但它就在那里。不过这只是一个猜测。