2017-06-21 105 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找實體定義翻譯的例子,查看文件和表單類型