问题
Introduction
In my personal project I am using:
- XAMPP with PHP
v7.1.6 - Symfony
v3.3.8 - KnpMnenuBundle
dev-master / 2.2.x-dev(devversion because it is compatible with currentSymfony 3.3.xversion, earlier versions did not install viacomposer.) [link 1], [link 2], [link 3] in order to manage Menus. - Bootstrap
v3.3.7 - Bootstrap and KnpMenuBundle integration [link 4]
Setting up
To setup i used documentation in [2], [3] and code samples [4]. My menu is working, integration between Bootstrap and KnpMenuBundle also works.
Problem
I am using Logged in as myTestUserName in user profile part of the menu. And i would like to exclude this item from translation as i am getting full translated string manually (code example 1).
At the moment even with translation_domain explicitly set to false i get said menu item in the missing section of Translation Messages section in the profiler.
Images
Question
What is the correct way of making sure specific translations are not included in missing section in case of using KnpMenuBundle?
CODE: sample 1
sample of my MenuBuilder
$profile->setChildrenAttribute("class", "dropdown-menu")
->addChild('Logged in as', array('label' => $getTranslatedLoggedInAs))
->setExtra('divider_append', true)
->setExtra('translation_domain', false);
CODE: sample 2
getting loggedInAs translated string in MenuBuilder
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;
}
Conclusion
Please advise.
Thank you for your time and knowledge.
回答1:
I suppose you have error in [link 4] in block label. translation_domain is not checked for false and label is translated in any way.
{% block label %}{{ item.label|trans(
item.getExtra('translation_params', {}),
item.getExtra('translation_domain')
) }}{% endblock %}
Look how it works in 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 %}
来源:https://stackoverflow.com/questions/46007289/how-to-exclude-certain-string-from-showing-up-in-missing-translations-using-knpm