我目前情况
<?php
namespace MyBundle\Form\Type;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints as Assert;
class MyFormType extends AbstractType implements ContainerAwareInterface
{
use \Symfony\Component\DependencyInjection\ContainerAwareTrait;
public function buildForm(FormBuilderInterface $builder, array $options)
{
$translator = $this->container->get('translator');
$builder->add('my-field', 'text', [
'constraints' => [
new Assert\NotBlank([
'message' => $translator->trans('%field% should not be blank.', ['%field%' => $translator->trans('MyFieldName')]),
]),
],
]);
}
public function getName()
{
return 'my_form';
}
}
此示例已经有效,我正在尝试对其进行重构,因此我不必将容器(或翻译器)包含在其中。
挑战在于保持
作为唯一两个可翻译的字符串,因为它可能已经翻译了MyFieldName(就像标签一样),留下&#39;%field%不应该是空白的。&#39 ;作为对网站中任何字段有效的通用邮件。
答案 0 :(得分:0)
过去陷入困境 'attr'=&gt;阵列( 'placeholder'=&gt; '信息', )
答案 1 :(得分:0)
如果您通过取消注释此行,已在 symfony framework 配置中激活了翻译器:
#translator: { fallbacks: [%locale%] }
config.yml
中,默认情况下会使用validators
域中的值来转换验证程序设置的所有违规错误消息。
你应该app/Resources/translations/validators.(_format)
或者。{
src/(Acme/)*Bundle/Resources/translations/validators.(_format)
定义您的自定义消息,并在完成后清除缓存。
示例:
# app/Resources/translations/validators.yml
my_form:
errors:
my_field:
not_blank: My field should not be blank
和
// FormType
$builder->add('my-field', 'text', [
'constraints' => [
new Assert\NotBlank([
'message' => 'my_form.errors.my_field.not_blank',
]),
],
]);
验证程序的错误消息将自动翻译。
请参阅http://symfony.com/doc/current/book/translation.html#translating-constraint-messages