2017-06-21 74 views
-1

在树枝模板中翻译内容看起来简单直接:我运行bin/console translation:update来填充翻译文件。问题在于它似乎忽略了表单。如何翻译Symfony 3格式?

在创建实体,存储库和表单/类型之后,我在树枝模板中使用{{ form_row(form.field) }}来绘制表单元素。

在如何自定义和翻译表单标签,占位符和错误消息方面是否有一套行之有效的做法?

必须使用form_labelform_widget而不是form_row来自定义标签吗?

+0

不要你使用FormTypes?尝试将转换器注入FormType并转换字段标签。 – Chris

回答

0

您可以创建例如这里命名forms.es.yml文件,你可以把你TRADUCTIONS在西班牙,并在您的形式,你可以像这样的IT连锁:

//LoginType.php 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('email', 
      EmailType::class, 
      [ 
       'translation_domain' => 'forms', //It's translate the label 
       'constraints' => [ 
        new Email([ 
         'message' => 'email' 
        ]) 
       ] 
      ] 
     ) 
     ->add('password', 
      RepeatedType::class, 
      [ 
       'type' => PasswordType::class, 
       'invalid_message' => 'cliente.password_not_equal', 
       'first_options' => ['label' => 'cliente.password'], 
       'second_options' => ['label' => 'cliente.repeat_password'], 
       'translation_domain' => 'forms', //Here is again 
       'constraints' => [ 
        new NotBlank([ 
         'message' => 'not_blank' 
        ]) 
       ] 
      ] 
     ) 
     ->add('current_uri', HiddenType::class); 
} 

它的工作原理,因为symfony的2

另一种方法是在你的树枝,只打印控件和翻译标签:

//index.html.twig 
<label> 
    {{'form.email'|trans({})}} 
    {{ form_widget('form.email') }} //It only prints the input tag 
</label> 

是一种简单的方法,但不太可重复使用的。

+0

我认为第一种方法运作良好。我面临的唯一问题是:如果我运行'bin/console translation:update en',它似乎忽略了我所有的表单。我需要手动维护翻译文件吗? – user3429660

+0

对不起,但我想是的。如果有办法自动执行,我不知道它:c。其实我手动维护它。 – Koronos

+0

对我来说只有2ed的方式工作? –

0

要作为文档https://symfony.com/doc/current/validation/translations.html

解释你需要用的key/value票面validators.lang_used.format文件转换形式错误。然后通过消息密钥的Assert验证通过密钥。

在实体

// src/Entity/Author.php 
use Symfony\Component\Validator\Constraints as Assert; 

class Author 
{ 
    /** 
    * @Assert\NotBlank(message="author.name.not_blank") 
    */ 
    public $name; 
} 

在表单创建

$form = $this->createFormBuilder() 
    ->setMethod('GET') 
    ->add('email', TextType::class, [ 
     'constraints' => [ 
      new NotBlank(['message' => 'error.not_blank']), 
     ], 
     'label' => 'label.email-domain' 
    ]) 
    ->getForm(); 

要翻译标签只是传递的钥匙,“标签”,按键需要的前缀标签一个现场直播的消息。*文件。

翻译上查看纯文本(键/值对邮件定义。*文件)

{{ 'save_button'|trans }} 

https://github.com/symfony/demo找实体定义翻译的例子,查看文件和表单类型