Использование пакета easy_localization для перевода моих приложений. В качестве примера вот файл переводов json:
{"test": {
"zero": "zero",
"one": "one",
"two": "two",
"few": "few",
"many": "many",
"other": "other"},}
Если я затем просто распечатаю их на консоли следующим образом:
print(plural("test", 0));
print(plural("test", 1));
print(plural("test", 2));
print(plural("test", 3));
print(plural("test", 4));
он вернется
zero
one
two
other
other
Так что это работает для «ноля», «один», «два», как и ожидалось. Но затем пропускает «несколько» и «много» и по умолчанию «другое».
Что такое «мало» и «много»? Должен ли я воспринимать «другие» как множественное число и игнорировать «немногие» и «многие»?
Ошибок нет, поэтому я не уверен, что это была предполагаемая функциональность. Мне кажется неправильным.
Если у кого-то был опыт работы с этим пакетом, было бы здорово, если бы они могли объяснить причину этого.
Вы можете увидеть правила множественного числа в их исходном коде.
Кажется, что большинство языков имеют очень простые правила множественного числа. Как английский, где в основном нет ни того, ни другого: у вас может быть «нет денег», «доллар» или «Х долларов». В английском языке нет специального языка для других сумм.
Боюсь, я не знаю ни одного из языков, в которых есть специальные правила для особых сумм. Но если вам когда-нибудь придется переводить для них, человек, говорящий на этом языке, точно об этом узнает.
Я думаю, что, возможно, английская функция должна иметь «один» и «многие», а затем по умолчанию «другое», но это мелочь, так как я просто буду использовать «другое» в качестве переменной формы множественного числа, по крайней мере, для английского языка.
Ах, я думаю, что теперь я понимаю это немного лучше, после просмотра исходного кода. Совсем запутался, почему так много одинаковых вещей. Глядя на арабскую функцию (PluralCase _ar_rule()), например, они могут использоваться для каждого типа (ноль, один, два, несколько, много). В то время как английская функция буквально имеет только «один», по умолчанию используется «другой», который, я полагаю, вы делаете во множественном числе. Я не понимал, что в зависимости от текущей локали функции будут меняться для множественного числа. Спасибо, что направили меня к этому исходному коду :)