0

前書き

Symfony v3.1.1 を使用していますが、フォーム送信ボタンのラベルの翻訳中に奇妙な動作を発見しました。

ファイルを使用してdomain_name.locale.xliffいます。

説明

ラベルは正しく翻訳されていますが、翻訳メッセージの欠落セクションに余分な翻訳が 1 つ表示されています。

スクリーンショット 1参照 , スクリーンショット 2 を参照

  1. 奇妙なのは、欠落している翻訳が翻訳された単語にすぎないことですが、generally.approximately.precisely表記法を使用しており、テンプレートには単一の単語がありません。

  2. また、ファントム翻訳はたまたまドメインに表示されmessagesますが、messagesドメインはそのテンプレートでは使用されていません...

私の小枝テンプレートの関連部分:

{% set button_submit_label = "admin.button.chooseDate"|trans({}, "admin") %}
{{ form_row(form.submit, {'label': button_submit_label, 'attr': {'class': 'button-choose-date small success'}}) }}

無効な翻訳項目がデバッグ ツールバーに表示されています。

スクリーンショット 1参照 , スクリーンショット 2 を参照

コード

フォームで使用する ClickType

<?php

namespace AppBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;

class ClickType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('from_date', DateType::class,
                array(
                    'mapped' => false,
                    'label' => false,
                    'widget' => 'single_text',
                    'format' => 'yyyy-MM-dd'
                )
            )
            ->add('submit', SubmitType::class,
                array(
                    'label' => false
                )
            )
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Click',
        ));
    }

    public function getBlockPrefix()
    {
        return null;
    }
}

完全な小枝テンプレート:

{% extends 'admin.html.twig' %}

{% block title %}{{ "admin.title.clicks"|trans({}, "admin") }}{% endblock %}

{% block stylesheets %}
    {{ parent() }}
{% endblock %}

{% block body %}
    <div class="content">
        {% block page %}

            {% block admin_menu %}
                {% include 'admin/admin_top_menu.html.twig' with {'admin_active': '6'} %}
            {% endblock %}

            {% block admin_content %}
                <div class="box-choose-date row clearfix text-center">
                    {% set from_date = app.request.get('from_date') %}
                    {{ form_start(form, {'attr': {'id': 'form-choose-date'}, 'method': 'GET'}) }}
                    <fieldset>
                        <p class="clicks-choose-date">{{ "admin.msg.clicksChooseDate"|trans({}, "admin") }}</p>
                        {% if (from_date != '') %}
                            <p class="clicks-you-chose">{{ "admin.msg.clicksSinceDate"|trans({'%from_date%': from_date|date("d.m.Y")}, "admin") }} {{ "admin.msg.foundClicks"|transchoice(click_count, {'%click_count%': click_count}, "admin") }}</p>
                        {% endif %}
                        {{ form_row(form.from_date, {'name': from_date, 'attr': {'class': 'input-date'}}) }}
                        {% if (from_date != '') %}
                            {% if (msg != '') %}
                                <p class="clicks-record-not-found">{{ msg }}</p>
                            {% endif %}
                        {% endif %}
                        {% set button_submit_label = "admin.button.chooseDate"|trans({}, "admin") %}
                        {{ form_row(form.submit, {'label': button_submit_label, 'attr': {'class': 'button-choose-date small success'}}) }}
                    </fieldset>
                    {{ form_end(form) }}
                </div>
                {% include 'admin/click_list.html.twig' with {'from_date': from_date, 'click_count': click_count} %}
            {% endblock %}

            {% block admin_footer %}
                {% include 'admin/admin_footer.html.twig' %}
            {% endblock %}

        {% endblock %}
    </div>
{% endblock %}

{% block javascripts %}
    {{ parent() }}
{% endblock %}

アップデート

Symfony 3.1.2 でテストしたところ、同じファントム翻訳文字列が Symfony プロファイラーに表示されます。

結論

それは Symfony のバグですか、それとも何か間違っていますか?

お知らせ下さい。

お時間と知識をありがとうございました。

4

1 に答える 1

1

Sebastiaan Stok がGithub でこの質問に答えました。

ラベルは、既に翻訳されている場合でも (カスタム ラベルで form_row を呼び出す FormType またはテンプレートで)、常にテンプレートのトランスレータを介して実行されます。form_div_layout.html.twig 行: 213

これを防ぐには、translation_domain を false に設定します。

{% set button_submit_label = "admin.button.chooseDate"|trans({}, "admin") %}
{{ form_row(form.submit, {'label': button_submit_label, translation_domain: false, 'attr': {'class': 'button-choose-date small success'}}) }}
于 2016-07-11T15:44:14.067 に答える