Интернационализация предложений с двумя словами во множественном числе

Используя gettext, как сделать предложение с несколькими числовыми переменными переводимым? ngettext принимает только одно число в качестве параметра множественного числа.

Перестановки, которые должны быть разрешены в приведенном ниже предложении, - это «взрослый и ребенок», «взрослый и ребенок», «взрослый и дети» и «взрослые и дети».

"от #ДОСТУПНООТ до #ДОСТУПНОДО для #NUMADULTS взрослых и #NUMCHILDREN ребенка"


person dsas    schedule 11.12.2009    source источник


Ответы (1)


Грамматика может быть очень сложной в некоторых других языках, кроме английского, и вы должны знать, что практически невозможно составить правильные сложные предложения, используя ваш подход.

Помните, что несколько переменных и жанр (мужской/женский) также добавляют много сложности.

Решение состоит в том, чтобы генерировать только простые предложения, в которых у вас есть только одна переменная. Это тот случай, который поддерживается ngettext.

Поймите, что ngettext — это что-то замечательное, и это то, что большинство коммерческих фреймворков i18n от компаний-разработчиков программного обеспечения для ошибок даже не поддерживают. Тем не менее, у него есть свои ограничения, поэтому краткое решение вашего вопроса: разбить сложное предложение на несколько простых, которые можно перевести с помощью только одной переменной.

person sorin    schedule 12.12.2009
comment
Я просто хочу добавить, что даже если есть только одна форма множественного числа, то для этого потребуется 4 строки. Один для обеих частей единственного числа, один для обеих частей множественного числа, один для первого единственного и второго множественного числа и один для наоборот. Gettext даже не поддерживает это, и создание чего-то, что поддерживает, было бы слишком сложным для использования. - person Tor Valamo; 12.12.2009
comment
Я надеялся, что это не будет ответом, но подумал, что это может быть :) - person dsas; 13.12.2009
comment
Это не невозможно, это легко сделать, используя несколько уровней вложенности в сообщениях, это подход, который использует ICU. ngettext не очень хорош, он несовершенен, потому что он допускает только одноуровневую вложенность, поэтому он может обрабатывать выбор только по одной переменной. Совет разбить предложение на несколько — плохой, но единственный возможный с gettext. Вы соединяете части как A+B+C в своем коде, но в целевом языке это неправильно и должно быть C+A+B или часть C должна идти первой и так далее. - person Basel Shishani; 08.01.2012
comment
У кого-нибудь есть предложения по stackoverflow.com/questions/13919080? Мне нравится, как Zend_Translate позволяет мне использовать упорядоченные переменные (что очень важно, поскольку порядок языков различается, как указал Базель). Я конвертирую свой сайт из массива в gettext и не хочу просматривать весь сайт, добавляя четверное вложение. Я просто хочу выяснить, как заставить gettext учитывать упорядоченные переменные. Мысли? - person Ryan; 18.12.2012