Как проверить, существует ли элемент перевода в Twig / Symfony2? - PullRequest
7 голосов
/ 09 марта 2012

Вот мой макрос для печати элемента боковой панели.Каждый атрибут title создается при поиске 'tip.' ~ route элемента в messages.it.yml.

Даже если элемент trans не существует Twig всегда возвращает строку, переданную в фильтр transНапример:

tip:
    dashboard: Dashboard

Шаблон:

{% _self.sideitem('dashboard', 'home') %} // <a title="Dashboard">...
{% _self.sideitem('fail', 'home') %}      // <a title="tip.fail">...

{% macro sideitem(route, icon) %}
    {% set active = (route == app.request.get('_route')) %}
    {% set icon = icon ? 'icon-' ~ icon ~ (active ? ' icon-white' : '') : '' %}

    <li class="{{ active ? 'active' : '' }}">
        <a href="{{ path(route) }}" title="{{ ('tip.' ~ route)|trans }}">
            <i class="{{ icon }}"></i> {{ ('nav.' ~ route)|trans }}
        </a>
    </li>
{% endmacro %}

Как я могу проверить, существует ли транс-элемент перед его печатью?

РЕДАКТИРОВАТЬ : жестокий обходной путь может быть (код не проверен):

<li class="{{ active ? 'active' : '' }}">
    {% set look    = ('tip.' ~ route) %}
    {% set foreign = look|trans %}
    {% set has     = not(look == foreign) %}

    <a href="{{ path(route) }}" {{ not has ? '' : 'title="' ~ foreign ~ '"'  }} >
        <i class="{{ icon }}"></i> {{ ('nav.' ~ route)|trans }}
    </a>
 </li>

Ответы [ 4 ]

9 голосов
/ 05 июня 2014

Я пришел к следующему решению:

{% if "#{var}.something"|trans != "#{var}.something" %}

Это просто проверяет, отличается ли результат ключа перевода от самого ключа перевода. Если ключ не имеет перевода, фильтр «trans» возвращает ключ перевода.

4 голосов
/ 26 апреля 2017

Вы можете использовать расширение ветки, чтобы подтвердить, существует перевод или нет.

$locale = $translator->getLocale();
$catalogue = $translator->getCatalogue($locale);
$id = 'bank_transaction_history.transfer.' . $resultCode;
if ($catalogue->defines($id)) {
    return $translator->trans($id);
}
1 голос
/ 25 июля 2012

Я проанализировал вашу проблему и просмотрел переводчик по умолчанию, который используется в Symfony2.

Используется метод trans () , который реализован как this .

Для вас лучшим обходным решением было бы переопределить этот метод, чтобы он возвращал false, когда вы ожидаете этого.

Короче говоря:

  1. Напишите ваш класс, который реализует TranslatorInterface и расширяет Переводчик

  2. Переопределить метод trans () там

  3. Определите службу как translator с вашим классом (он заменит переводчик по умолчанию с твоим)

Вот и все

Надеюсь, это поможет;)

0 голосов
/ 11 марта 2012

попробуйте присвоить строку 'nav.' ~ путь к переменной и следующий перевод переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...