【问题标题】:How to exclude certain string from showing up in missing translations using KnpMenuBundle and Symfony3如何使用 KnpMenuBundle 和 Symfony3 排除某些字符串出现在丢失的翻译中
【发布时间】:2018-02-10 22:26:22
【问题描述】:

简介

在我正在使用的个人项目中:

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

设置

为了设置,我使用了 [2]、[3] 中的文档和代码示例 [4]。我的菜单正常工作,BootstrapKnpMenuBundle 之间的集成也可以工作。

问题

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

目前,即使 translation_domain 明确设置为 false,我也会在 profilerTranslation Messages 部分的缺失部分中得到所述菜单项。

图片

问题

如果使用KnpMenuBundle,确保特定翻译不包含在缺失部分中的正确方法是什么?

代码:示例 1

我的MenuBuilder的样本

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

代码:示例 2

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

public function getTranslatedLoggedInAs()
{
    $user = $this->tokenStorage->getToken()->getUser();
    //dump($user);

    $translated_logged_in_as = '';

    $anonymous_user = 'anon.';
    if ($user->getUsername() !== $anonymous_user)
    {
        $translated_logged_in_as = $this->translator->trans(
            'layout.logged_in_as', ['%username%' => $user->getUsername()], 'FOSUserBundle'
        );
    }
    elseif ($user->getUsername() === $anonymous_user)
    {
        $translated_logged_in_as = $this->translator->trans(
            'layout.logged_in_as', ['%username%' => $anonymous_user], 'FOSUserBundle'
        );
    }

    return $translated_logged_in_as;
}

结论

请指教。

感谢您的时间和知识。

【问题讨论】:

  • 您是使用捆绑模板还是自定义模板来显示菜单?
  • 我正在使用覆盖 KnpMenuBundle 默认模板的自定义模板(如 [链接 4] 中所示),以便使用 Bootstrap 集成。

标签: php twitter-bootstrap symfony knpmenubundle knpmenu


【解决方案1】:

我想您在块 label 中的 [链接 4] 中有错误。 translation_domain 不检查 false 并且标签以任何方式被翻译。

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

看看它在KnpMenuBundlehttps://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 %}

【讨论】:

  • 谢谢@Max P。你的回答是 100% 正确的。我将原始 label block 复制到了覆盖模板,现在没有丢失的翻译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
相关资源
最近更新 更多