Вопрос

Я использую Формат сообщения (часть intl расширение) в PHP.Расширение использует ICU 4.6.1.

Однако проблема не в PHP.

Я хотел бы отформатировать фрагмент строки, приняв решение по первому токену {0}:

  • Когда {0} является 0, текст должен быть a
  • Когда это произойдет 1, текст должен быть b
  • Во всех остальных случаях текст должен быть следующим c

Я понимаю, что это можно было бы сделать с помощью plural, =0 для 0 case, но, судя по моему тестированию, это, похоже, не работает, скорее всего, потому, что смещения и пользовательские множественное число были введены в версии 4.8.

Таким образом, я пытаюсь добиться этого, используя select:

{0, select, 0 {a} other {{0,plural,one{b}other{c}}}}

Однако по какой-то причине программа форматирования сообщений не смогла отформатировать вышеуказанное и возвращает false (не удалось отформатировать).

Почему это так происходит?Есть ли проблема с моим синтаксисом?


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

Еще одно обновление:Обновлено до версии 49.1.2 отделения интенсивной терапии и intl 3.0.0a2.Теперь я могу использовать =0, =1, и т.д., но это перестало работать (работало ранее):

{0}{0, plural, one{a} other{b}}

где как это работает:

{0, plural, one{a} other{b}}
Это было полезно?

Решение

В итоге я обновился до последней версии intl и ОИТ 49.1.2.

Однако как только это будет сделано, это не сработает:

{0}{0, plural, one{a} other{b}}

Но это сработало:

{0, plural, =0{a} one{# b} other {# c}}

Другие советы

Тот Самый select тип аргумента - это точное совпадение строк.Вам нужно было бы убедиться, что вы передаете значение строкового аргумента, а затем иметь соответствующие предложения.Избегайте использования множественного числа для точного соответствия регистру, поскольку каждая локаль имеет свои собственные правила для того, что one означает.

Следующее следует даю вам то, что вы хотите, но я знаю гораздо больше об этом формате, чем о реализации PHP.

MessageFormatter::formatMessage($locale,
  '{0, select, _0 {a} _1 {b} other {c}}',
  array( "_$value" ))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top