В Cotonti для правильных числительных окончаний написана функция sed_declension.
Сейчас с этой функцией могут работать следующие языки: en, de, nl, se, fr, uk, ru, ua,
а также все языки у которых нет числительных окончаний.
При желании данную функцию лекго можно расширить под любой язык.
Вам всего лишь надо добавить правило для вашего языка.
Правила можно посмотреть
тут.
И так как же пользоваться данной функцией ?
Объясняю на пальцах на примере плагина search:
для русского языка
ищем в ланг файле строку:
$L['plu_match'] = "совпадений";
и меняем ее на:
$L['plu_match'] = array('совпадение','совпадения','совпадений');
т.е. создаем массив array для трех склонений, первое это для значения 1, второе для значения 2 и третье для значения 0 или 5(что одно и тоже).
Все, на этом переделка русского ланг файла закончена.
для английского языка
ищем в ланг файле строку:
$L['plu_match'] = "match(es)";
и меняем ее на:
$L['plu_match'] = array('matches','match');
т.е. создаем массив array для двух склонений, первое это для значений 0, 2 и т.д., второе для значения 1 .
Все, на этом переделка английского ланг файла закончена.
Примечание: Для языков не нуждающихся в склонении пишем(оставляем) как раньше,
т.е. без array.
$L['plu_match'] = "match";
Теперь переходим к самому плагину:
Ищем где в нем вызывается эта фраза, в данном случае в search.php ищем:
".$items." ".$L['plu_match']."
она там находится в 4 местах.
Меняем ее на :
".sed_declension($items,$L['plu_match'])."
Все.
Дополнение:
Функцции sed_declension не важно какое число на входе, отрицательное или положительное, и те и другие обработаются правильно.
Также входное число может быть заключено в какие либо тэги, к примеру в тэг
Bold.
Это тоже обработается правильно.
Для функции sed_declension есть еще один параметр - это $onlyword.
Он может быть либо $onlyword=true, либо $onlyword=false.
По умолчанию $onlyword = false.
Т.е. этим параметром мы задаем что будет возвращать эта функция.
Если задать $onlyword=true, то вернется только слово, без числа.
Если задать $onlyword = false или опустить данный параметр, как в приведенном выше примере на плагине search, вернется и число и слово.
Ну вот вроде бы и все.
P.S. Надеюсь теперь все доступно объяснил ?
P.P.S Просьба для тех, кто пишет плагины, используйте эту функцию,
а то как то даже стыдно видеть такое
match(es) :-)
Thanked: 5 times
array[0] - для значения 1
array[1] - для значений больше или равно 2 но меньше 5
array[2] - для значений больше или равно 5 а также для 0
Подсознательно всё ясно, но уточнение не помешает.
Thanked: 2 times
Да, так.
Thanked: 2 times
array[0] - для значения 1
array[1] - для значения 2
array[2] - для значения 5, а также для 0