Symfony1 如何";有效地;设置sfValidatorInteger等的默认错误消息。?

Symfony1 如何";有效地;设置sfValidatorInteger等的默认错误消息。?,symfony1,symfony-1.4,symfony-forms,Symfony1,Symfony 1.4,Symfony Forms,我刚刚遇到了一个问题,我认为这是symfony框架的某种“bug”:我想为不同类型的验证器设置默认错误消息(例如,sfValidatorInteger)。为此,在我的ProjectConfiguration::setup方法中,我有: sfValidatorBase::setDefaultMessage('required', 'Erforderlich.'); sfValidatorBase::setDefaultMessage('invalid', 'Format ungültig.');

我刚刚遇到了一个问题,我认为这是symfony框架的某种“bug”:我想为不同类型的验证器设置默认错误消息(例如,
sfValidatorInteger
)。为此,在我的
ProjectConfiguration::setup
方法中,我有:

sfValidatorBase::setDefaultMessage('required', 'Erforderlich.');
sfValidatorBase::setDefaultMessage('invalid', 'Format ungültig.');
sfValidatorInteger::setDefaultMessage('invalid', '"%value%" ist keine Ganzzahl.');
这适用于
sfValidatorBase
,但不适用于例如
sfValidatorInteger
sfValidatorInteger
仍然显示预设的默认消息
““%value%不是整数”。

因此,我研究了
sfValidatorInteger::configure
的实现,发现它将实例的错误消息设置为硬编码:

protected function configure($options = array(), $messages = array())
{
  $this->addMessage('max', '"%value%" must be at most %max%.');
  $this->addMessage('min', '"%value%" must be at least %min%.');

  $this->addOption('min');
  $this->addOption('max');

  $this->setMessage('invalid', '"%value%" is not an integer.');
}
我本以为错误消息是从默认消息映射中读取的,但显然不是

那么,我如何能够以一种干净的方式解决这个问题,最好是不接触原始的symfony代码(因为我的更改可能会在将来的更新中被覆盖)?我是否应该派生所有验证器类以提供适当的
配置
实现?嗯,我不这么认为。单独设置每个验证器实例的错误消息也不是(干净的)选项

也许我在配置这些验证器时出错了。然后,一个更一般的问题是:如何为不同的验证器类设置默认错误消息,如
'invalid'=>'“%value%”ist keine Ganzzahl.
for
sfValidatorInteger

提前感谢,

Flinsch。

我认为您可以使用xliff翻译文件来实现这一点

<source>"%value%" is not an integer.</source>
<target>"%value%" n'est pas un entier.</target>
“%value%”不是整数。
“%value%”不是完整的。

我会创建我自己的验证程序,扩展默认的Symfony并使用它们。

谢谢你的建议。我必须将这个具体的xliff文件放在哪里?据我所知,xliff翻译需要使用
(“要翻译的字符串”)
才能工作。但是没有
\uu()
sfValidatorInteger
的内部。我看到一些调用在sfWidgetFormSchemaFormatter中进行翻译,调用了错误,因此我想它应该仍然可以工作。您应该将此文件放在应用程序的i18n文件夹中。(
apps/yourApp/i18n
)我不知道如何实现这一点。那些特定于应用程序的xliff文件似乎只适用于我自己使用的
\uuu()
,而不适用于其他库中的文件。此外,我必须创建多个xliff文件,每个应用程序一个。这不是“干净的”“在我看来是这样。但我感谢你。不管怎样,你的建议很有帮助。谢谢!这确实是我现在所做的。由于我只使用了几个不同的验证器,所以这项工作取得了成效。进一步的优势:我通常可以用我喜欢的设置“在课堂上”而不是“在实例上”配置它们。