Подтвердить что ты не робот

Есть ли стандартный способ в граале управлять множественными числами в международных строках из файлов свойств?

Используя плагин для международных, есть ли "правильный" способ динамически разделить слова или выбрать множественную версию свойства?

4b9b3361

Ответ 1

Вы можете использовать встроенный ChoiceFormat в сообщении i18n. Используя пример из java.text.MessageFormat Javadocs, вы можете определить что-то вроде:

numfiles.message = "There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}."

Затем в вашем GSP:

<g:message code="numfiles.message" args="[numfiles]"/>

Где numfiles - целочисленное значение.

Ответ 2

Как замечал @overzealous в комментариях, не все языки имеют одинаковые простые множественные правила, как это имеет английский язык. Английский язык имеет только две формы: one (количество 1, например 1 автомобиль, 1 час) и other (количество больше 1, например, 3 машины, 11 часов). В этом случае плюрализацию можно обрабатывать довольно просто в Grails, используя ChoiseFormat. Однако некоторые языки имеют более двух форм, например, у польского языка есть 4 формы: one (например, 1 авто), few (например, 2 авто), many (например, 6 aut) и other. Вот ссылка в таблицу, описывающую множественные правила для всех языков.

Я также написал плагин для Grails, который добавляет богатые способности плюрализации, используя таблицу выше. Используя его, вы можете просто написать messages.properties

msgcode={0} {0, plural, one{auto}few{auta}many{aut}other{aut}}

а затем используйте его:

<g:message code="msgcode" args="[3]"/>

напечатает 3 auta.