Переводы множественного числа с заменой строк в ZF2

#php #zend-framework2

#php #zend-framework2

Вопрос:

Рассмотрим следующие строки:

У меня есть яблоко.

У меня 4 яблока.

Как мне заставить ZF2 выдать второй результат? Я использую translatePlural и попробовал несколько вариантов этого:

 $translator->translatePlural('I have an apple', 'I have %d apples', 4);
$translator->translatePlural('I have an apple', 'I have %s apples', 4);
$translator->translatePlural('I have an apple', 'I have %$1 apples', 4);
$translator->translatePlural('I have an apple', 'I have %%s apples', 4);
  

Похоже, в документации Zend (1, 2) нет ничего, что объясняло бы, как это сделать. Таким образом, я не уверен, возможно ли это вообще.

Ответ №1:

Переводчик ZF2 больше не выполняет форматирование строк. Это имело место для ZF1, но в ZF2 это устарело. Рекомендуемый способ — четко указать это:

 $num = 4;
$t   = $translator;
sprintf($t->translatePlural('I have an apple', 'I have %d apples', $num),
        $num);
  

(Я просто очень плохо разбираюсь в форматировании)

Фактически это дает либо sprintf('I have an apple', $num) как результат, либо sprintf('I have %d apples', $num) как результат. В первом случае из-за отсутствия %d ничего не произойдет.