2012-02-24 63 views
1

我正在使用Symfony2翻譯以便在窗體中顯示錯誤消息。我的郵件在位於我的包的Ressources/translations子文件夾中的validators.fr.yml中定義。我還使用註釋來設置要使用的消息。Twig form_errors函數不會在validators.lang.yml中加載翻譯消息

問題是郵件沒有顯示在我的模板中。我只能得到我在註釋中定義的關鍵。

的代碼從我的實體樣本:

/** 
* Nom du site de travail. 
* 
* @var string le nom du site de travail. 
* 
* @ORM\Column(
*  name = "nom", 
*  type = "string", 
*  length = 255 
*) 
* 
* @Assert\NotBlank(message = "structure.siteTravail.nom.notnull") 
*/ 
private $nom; 

在我的表單類,我已經實現了getDefaultOptions方法與data_class選項(真的不知道,如果有幫助):

public function getDefaultOptions(array $options) 
{ 
    return array(
     'data_class' => 'My\FreakingBundle\Entity\SiteTravail' 
    ); 
} 

這裏是validators.fr.yml內容:

structure: 
    siteTravail: 
     nom: 
      notnull: Le nom est obligatoire. 

在我的樹枝模板我使用這個代碼渲染領域的錯誤:

{{ form_errors(form.nom) }} 

此外,翻譯app/config/config.yml被激活:

framework: 
    translator: { fallback: fr } 

所有我的翻譯是完全在messages.fr.yml這個工作捆綁和我已經有另一個使用messages.fr.ymlvalidators.fr.yml捆綁。

最奇怪的部分是,當我把validators.fr.yml的內容放在我的其他包中時,它的工作原理。

+0

翻譯文件加載**只有在註冊捆綁**。你有沒有在你的AppKernel中註冊你的2個包? – Florian 2012-02-25 12:30:30

+0

無論如何,驗證器消息的默認翻譯位置在這裏:https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig# L262。你確定你沒有壓倒一個樹枝塊嗎? – Florian 2012-02-25 12:32:46

回答

0

您可以強制翻譯覆蓋field_errors表單塊。

所以,當你渲染的形式在樹枝模板:

{% form_theme form _self %} 

{% block field_errors %} 
{% spaceless %} 
    {% if errors|length > 0 %} 
     <ul> 
      {% for error in errors %} 
       <li>{{ error.messageTemplate|trans(error.messageParameters, 'validators')|trans }}</li> 
      {% endfor %} 
     </ul> 
    {% endif %} 
{% endspaceless %} 
{% endblock %} 

{% block content %} 
    {# ... other stuffs ... #} 
     {{ form_widget(form) }} 
    {# ... other stuffs ... #} 
{% endblock %} 

如果你把某一特定領域的文件翻譯(例如:「validators.lang.yml」)使用此語法:

<li>{{ error.messageTemplate|trans(error.messageParameters, 'validators')|trans({}, 'validators') }}</li> 

在這裏,你可以找到所有定製替換目的默認形式塊:https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig