Как перевести с плюрализмом в Twig? - PullRequest
10 голосов
/ 12 сентября 2011

Как мне перевести текущий жестко закодированный текст с помощью ключа из языкового файла (messages.en.xliff)?

Я пытался использовать

{% trans %} translation_key{% endtrans %}

, но безуспешно.Symfony возвращает эту ошибку

Сообщение должно быть простым текстом в ProjectEventsBundle: По умолчанию: show_event.html.twig '

500 Внутренняя ошибка сервера - Twig_Error_Syntax

{% transchoice count %}
{0} The current hardcoded text|{1} is attending|{2} are attending|]2,Inf] and %count% - 2 others are attending
{% endtranschoice %}

Заранее спасибо.

Ответы [ 4 ]

15 голосов
/ 30 мая 2012

Я бы использовал такое решение:

messages.en.xliff:

<trans-unit id="1">
    <source>some.translation.key</source>
    <target>{0} no.attendee|{1} one attendee|{2} two attendees|{3} three attendees|]3,Inf] many attendees</target>
</trans-unit>

Шаблон веточки:

{{ 'some.translation.key'|transchoice(count) }}

Если вам нужно указать некоторые аргументы, вы должны передать их в качестве второго аргумента.

Вот прототип фильтра:

public function transchoice($message, $count, array $arguments = array(), $domain = "messages", $locale = null)
9 голосов
/ 04 апреля 2012

Обнаружено в Документация Symfony :

Symfony2 предоставляет специализированные теги Twig (trans и transchoice), чтобы помочь с переводом сообщений статических блоков текста:

{% trans %}Hello %name%{% endtrans %}

{% transchoice count %}

{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples

{% endtranschoice %}

Тег transchoice автоматически получает переменную% count% из текущего контекста и передает ее переводчику. Этот механизм работает только при использовании заполнителя по шаблону% var%.

8 голосов
/ 13 июля 2015

Эта тема довольно старая, но я бы посоветовал вам сделать что-то подобное:

В ваших сообщениях. LOCALE.yml

you.translaction.key: "{1}1 Comment|]1,Inf]%count% Comments"

В вашем шаблоне веточки

{% set count = 2 %}

{% transchoice count with {'%count%': count} %}you.translaction.key{% endtranschoice %}

Приветствия,

Симон

0 голосов
/ 13 сентября 2011

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

    {% set noattendee %}{% trans %} no.attendee {% endtrans %}{% endset %}
    {% set oneattendee %}{% trans %} one.attendee {% endtrans %}{% endset %}
    {% set twoattendees %}{% trans %} two.attendees {% endtrans %}{% endset %}
    {% set treeattendees %}{% trans with {'%people%': people} %} tree.attendees {% endtrans %}{% endset %}
    {% set manyattendees %}{% trans with {'%people%': people} %} many.attendees {% endtrans %}{% endset %}

    {% transchoice count with {
        '%noattendee%': noattendee,
        '%oneattendee%': oneattendee,
        '%twoattendees%': twoattendees,
        '%treeattendees%': treeattendees,
        '%manyattendees%': manyattendees}
    %}
        {0}  %noattendee%|{1}  %oneattendee%|{2} %twoattendees%|{3} %treeattendees%|]3,Inf] %manyattendees%
    {% endtranschoice %}
...