Переводить части строки по отдельности, используя Twig и расширение i18n?

У меня есть строка, которая выглядит как

This is a list of all items with number 123456 in United States.

и я хочу перевести его на шведский как

Detta är en lista över alla artiklar med nummer 123456 i USA.

Проблема в том, что число 123456 и название страны United States генерируются динамически, но строка доставляется в окончательном виде в шаблон Twig (используется для <meta name="description" ... />.

У меня уже есть файл .po с названиями стран, которые я перевожу, включая

English             Swedish
United States       USA 

Строка сгенерированного мета-описания может содержать любую комбинацию цифр и названий стран, поэтому я не могу жестко кодировать какие-либо переводы для всей строки. Есть ли способ повторно использовать мои существующие переводы для названий стран и перевести их внутри строки мета-описания, а номер просто останется таким, какой он есть? Или мне нужно сначала как-то разделить строку, а затем перевести каждую часть по отдельности?


person Magnus W    schedule 12.02.2018    source источник


Ответы (1)


Я не программист PHP, поэтому использую псевдокод:

num_items = 42;
country = "United States";
string = sprintf(gettext("... items with number %d in %s"),
                 num_items, gettext(country));

Это то, что вы ищете?

person Guido Flohr    schedule 22.02.2018
comment
Это то, что я в итоге сделал. Я использую gettext() напрямую вместо расширения перевода Twig для создания переведенной строки в моем контроллере, а затем передаю ее в представление. Однако в вопросе я имел в виду, был ли способ заставить расширение перевода искать правильный перевод для строки, которая следует определенному шаблону, и переводить ее, но копировать переменные (число в приведенном выше примере) из исходной строки в переведенную... не думаю. - person Magnus W; 22.02.2018
comment
Я не очень понимаю твой план. Но есть два способа интерполяции переменных. Либо элементы с номером {{ number}} в форме {{country}}, либо вложенный вызов gettext из моего ответа. Так что ваша догадка, вероятно, верна. - person Guido Flohr; 22.02.2018