如何使用KnpMenuBundle和Symfony3排除某些字符串显示缺少的翻译

时间:2017-09-01 20:03:06

标签: php twitter-bootstrap symfony knpmenubundle knpmenu

简介

在我使用的个人项目中:

  • XAMPP with PHP v7.1.6
  • Symfony v3.3.8
  • KnpMnenuBundle dev-master / 2.2.x-devdev版本,因为它与当前Symfony 3.3.x版本兼容,早期版本未通过composer安装。)[link 1],{{ 3}},[link 2]以管理菜单。
  • Bootstrap v3.3.7
  • Bootstrap和KnpMenuBundle集成[link 3]

设置

在[2],[3]和代码示例[4]中设置我使用过的文档。我的菜单正常运行,BootstrapKnpMenuBundle之间的集成也有效。

问题

我在菜单的Logged in as myTestUserName部分使用了user profile。我想从翻译中排除这个项目,因为我手动获得完整的翻译字符串(代码示例1)。

即使将translation_domain明确设置为false,我也会在Translation Messages的{​​{1}}部分的缺失部分中显示所述菜单项。

图片

[link 4]

问题

在使用profiler的情况下,确保特定翻译未包含在缺失部分的正确方法是什么?

代码:样本1

我的KnpMenuBundle

的样本
MenuBuilder

代码:样本2

$profile->setChildrenAttribute("class", "dropdown-menu") ->addChild('Logged in as', array('label' => $getTranslatedLoggedInAs)) ->setExtra('divider_append', true) ->setExtra('translation_domain', false);

中获取loggedInAs个翻译后的字符串
MenuBuilder

结论

请告知。

感谢您的时间和知识。

1 个答案:

答案 0 :(得分:1)

我认为你在label区的[link 4]中有错误。 translation_domain未检查false,并且以任何方式翻译标签。

{% block label %}{{ item.label|trans(
    item.getExtra('translation_params', {}),
    item.getExtra('translation_domain')
) }}{% endblock %}

了解KnpMenuBundle https://github.com/KnpLabs/KnpMenuBundle/blob/master/Resources/views/menu.html.twig

的工作原理
{% block label %}
    {%- set translation_domain = item.extra('translation_domain', 'messages') -%}
    {%- set label = item.label -%}
    {%- if translation_domain is not same as(false) -%}
        {%- set label = label|trans(item.extra('translation_params', {}), translation_domain) -%}
    {%- endif -%}
    {%- if options.allow_safe_labels and item.extra('safe_label', false) %}{{ label|raw }}{% else %}{{ label }}{% endif -%}
{% endblock %}