Функция Twig form_errors не загружает сообщение перевода в validators.lang.yml - PullRequest
1 голос
/ 24 февраля 2012

Я использую переводы Symfony2 для отображения сообщений об ошибках в моих формах. Мое сообщение определено в validators.fr.yml, расположенном в подпапке Ressources/translations моего пакета. Я также использую аннотации, чтобы настроить использование сообщения.

Проблема в том, что сообщение не отображается в моем шаблоне. Я получаю только тот ключ, который определил в своей аннотации.

Пример кода от моей сущности:

/**
 * 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.

В моем шаблоне Twig я использую этот код для визуализации ошибок поля:

{{ form_errors(form.nom) }}

Также перевод активируется в app/config/config.yml:

framework:
    translator: { fallback: fr }

Все мои переводы отлично работают в messages.fr.yml для этого пакета, и у меня есть другой пакет, использующий как messages.fr.yml, так и validators.fr.yml.

Самое странное, что когда я помещаю содержимое validators.fr.yml в другой пакет, оно работает.

1 Ответ

0 голосов
/ 04 апреля 2012

Вы можете принудительно переопределить преобразование блока формы 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

...