使用自定义域名的Symfony 3.1翻译显示已翻译的消息

时间:2016-06-25 16:44:54

标签: translation symfony symfony-3.1

引言

我正在使用Symfony v3.1.1,并在翻译表单提交按钮标签时发现了奇怪的行为。

我正在使用domain_name.locale.xliff个文件。

说明

标签已正确翻译,但翻译消息缺失部分中显示了一个额外的翻译!

See screenshot 1See screenshot 2

  1. 奇怪的是,缺少翻译只是一个翻译过的单词,但我使用的是generally.approximately.precisely符号,而且在模板中没有单词。

  2. 此外,幻像翻译恰好在messages域中显示,但messages域未在该模板中使用...

  3. 我的树枝模板的相关部分:

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

    调试工具栏中显示无效的翻译项目。

    See screenshot 1See screenshot 2

    CODE

    我在表单中使用的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 profiler中显示了相同的幻像翻译字符串。

    结论

    这是Symfony中的错误还是我做错了什么?

    请告知。

    感谢您的时间和知识。

1 个答案:

答案 0 :(得分:0)

Sebastiaan Stok回答了这个问题on Github

  

标签始终通过模板中的翻译器运行,即使它已经翻译过(在FormType或模板中调用带有自定义标签的form_row)。 form_div_layout.html.twig line: 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'}}) }}