На данный момент добавлена возможность для перевода слова в нескольких формах.
Например, для слова "запись" в русском языке есть 3 формы:
- 1 запись
- 2 записи
- 5 записей
В других языках количество форм другое. Из языков, которые присутствуют в нашей системе на данный момент, максимальное кол-во форм имеет арабский язык - 6 форм.
Соответственно для каждого слова, который мы желаем показать в правильной форме мы создаем 6 ключей типа:
- record_form_0
- record_form_1
- record_form_2
- record_form_3
- record_form_4
- record_form_5
Правила образования различны для разных языков и зависят от n (числа описываемых объектов):
case 'ar': // arabic + // nplurals=6 $s = '_form_'.(($n==0) ? '0' : ($n==1) ? 1 : ($n==2) ? 2 : (($n % 100 >= 3) && ($n % 100 <= 10)) ? 3 : (($n % 100 >= 11) && ($n % 100 <= 99)) ? 4 : 5); return $lang[ $key.$s ]; break; case 'cz': // czech + // nplurals=3 $s = '_form_'.(($n==1) ? '0' : ($n>=2 && $n<=4) ? 1 : 2); return $lang[ $key.$s ]; break; case 'de': // german + case 'bg': // Bulgarian + case 'gr': // greek + case 'en': // english + case 'es': // espanol + case 'ee': // estonian + case 'il': // hebrew + case 'it': // italian + case 'mn': // mongolian case 'nl': // dutch + case 'sq': // albainian + case 'my': // malay // nplurals=2; $s = '_form_'.( ($n != 1) ? '0' : 1 ); return $lang[ $key.$s ]; break; case 'pl': // polskiy + // nplurals=3 $s = '_form_'.( ($n==1) ? '0' : (($n%10>=2) && ($n%10<=4) && ($n%100<10 || $n%100>=20)) ? 1 : 2); return $lang[ $key.$s ]; break; case 'ru': // russian + // nplurals=3 $s = '_form_'.( (($n%10==1) && ($n%100!=11)) ? '0' : (( ($n%10>=2) && ($n%10<=4) && ($n%100<10 || $n%100>=20)) ? 1 : 2) ); return $lang[ $key.$s ]; break; case 'sk': // Slovak + // nplurals=3 $s = '_form_'.( ($n==1) ? 1 : ($n>=2 && $n<=4) ? 2 : '0' ); return $lang[ $key.$s ]; break; case 'fa': // farsi + case 'ja': // japan + case 'tr': // turkish + case 'vn': // Vietnamese + case 'cn': // Chinese + case 'tw': // Tradional Chinese ? + case 'kz': // Kazakh + // nplurals=1 $s = '_form_0'; return $lang[ $key.$s ]; break; case 'ua': // Ukrainian + // nplurals=3 $s = '_form_'.( ($n%10==1 && $n%100!=11) ? '0' : ($n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20)) ? 1 : 2 ); return $lang[ $key.$s ]; break; case 'lt': // Lithuanian // nplurals=3 $s = '_form_'.( ($n%10==1 && $n%100!=11) ? '0' : ($n%10>=2 && ($n%100<10 || $n%100>=20)) ? 1 : 2 ); return $lang[ $key.$s ]; break; case 'fr': // french + // nplurals=2 $s = '_form_'.( $n > 1 ? '0' : 1 ); return $lang[ $key.$s ]; break;



