Используя плагин для международных, есть ли "правильный" способ динамически разделить слова или выбрать множественную версию свойства?
Есть ли стандартный способ в граале управлять множественными числами в международных строках из файлов свойств?
Ответ 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
.