如何使用 KnpMenuBundle 和 Symfony3 排除某些字符串出现在缺失的翻译中
How to exclude certain string from showing up in missing translations using KnpMenuBundle and Symfony3
简介
在我的个人项目中,我使用:
- XAMPP 与 PHP
v7.1.6
- Symfony
v3.3.8
- KnpMnenuBundle
dev-master / 2.2.x-dev
(dev
版本因为兼容当前Symfony 3.3.x
版本,之前的版本没有通过composer
安装。)[link 1], [link 2], [link 3]中为了管理菜单。
- Bootstrap
v3.3.7
- Bootstrap 和 KnpMenuBundle 集成 [link 4]
正在设置
为了设置,我使用了 [2]、[3] 中的文档和代码示例 [4]。我的菜单有效,Bootstrap
和 KnpMenuBundle
之间的集成也有效。
问题
我在菜单的 user profile
部分使用 Logged in as myTestUserName
。我想从翻译中排除此项,因为我正在手动获取完整的翻译字符串(代码示例 1)。
目前,即使 translation_domain
明确设置为 false
,我也会在 profiler
的 Translation 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;
}
结论
请指教
感谢您的时间和知识。
我想你在块 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 %}
简介
在我的个人项目中,我使用:
- XAMPP 与 PHP
v7.1.6
- Symfony
v3.3.8
- KnpMnenuBundle
dev-master / 2.2.x-dev
(dev
版本因为兼容当前Symfony 3.3.x
版本,之前的版本没有通过composer
安装。)[link 1], [link 2], [link 3]中为了管理菜单。 - Bootstrap
v3.3.7
- Bootstrap 和 KnpMenuBundle 集成 [link 4]
正在设置
为了设置,我使用了 [2]、[3] 中的文档和代码示例 [4]。我的菜单有效,Bootstrap
和 KnpMenuBundle
之间的集成也有效。
问题
我在菜单的 user profile
部分使用 Logged in as myTestUserName
。我想从翻译中排除此项,因为我正在手动获取完整的翻译字符串(代码示例 1)。
目前,即使 translation_domain
明确设置为 false
,我也会在 profiler
的 Translation 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;
}
结论
请指教
感谢您的时间和知识。
我想你在块 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 %}