Именованные аргументы для INTL MessageFormatter с PHP - PullRequest
2 голосов
/ 22 февраля 2012

Я хотел бы использовать именованные аргументы в строке, переданной MessageFormater, например:

$fmt = new MessageFormatter("en_US", "My name id {my_name}");
$fmt->format(array('my_name' => 'John'));

Когда я запускаю этот код, я получаю сообщение об ошибке:

$fmt->getErrorMessage() returns

Ошибка форматирования числа: U_ILLEGAL_ARGUMENT_ERROR

Принимая во внимание, что

$fmt = new MessageFormatter("en_US", "My name id {0}");
$fmt->format(array(0 => 'John'));

работает хорошо.

Отчет веб-сайта icu-project о том, что именованные аргументы поддерживаются после ICU 3.8 ( Видно здесь ), а я использую 4.2.1

Где единорог?PHP не поддерживает именованные аргументы для MessageFormatter?Может есть альтернатива?

Ответы [ 2 ]

1 голос
/ 27 июня 2012

Это исправлено в будущей (на сегодняшний день) версии intl.См. https://bugs.php.net/bug.php?id=61871.

0 голосов
/ 22 февраля 2012

Да, похоже. Что ты хочешь услышать?

Обновление: после ОП отредактировал свой вопрос

echo vsprintf('My name id %s', array('John'));

См. sprintf ()

Конечно, это не какие-то локальные вещи.

...