Skip to content

Instantly share code, notes, and snippets.

@pafnuty
Last active June 9, 2019 15:02
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save pafnuty/8eed5b92e224f25358eb to your computer and use it in GitHub Desktop.
Save pafnuty/8eed5b92e224f25358eb to your computer and use it in GitHub Desktop.
Склонение русских слов на javascript и php с идентичной реализацией передачи параметров
/**
* Функция для склонения русских слов
* Пример использования: ruDeclination(5,'комментари|й|я|ев')
*
* @author Павел Белоусов <pafnuty10@gmail.com>
*
* @param {number} number Число, для которого будет расчитано окончание
* @param {string} words Слово и варианты окончаний для 1|2|1 (1 комментарий, 2 комментария, 100 комментариев)
* @return {string} Cлово с правильным окончанием
*/
function ruDeclination(number, words) {
'use strict';
var w = words.split('|'),
n = Math.abs(number * 1); // abs на случай отрицательного значения
return n % 10 == 1 && n % 100 != 11 ? w[0] + w[1] : (n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? w[0] + w[2] : w[0] + w[3]);
}
<?
/**
* Функция для склонения слов
* Пример использования: ruDeclination(5,'комментари|й|я|ев')
*
* @author Павел Белоусов <pafnuty10@gmail.com>
*
* @param integer $n Число, для которого будет расчитано окончание
* @param string $words Слово и варианты окончаний для 1|2|1 (1 комментарий, 2 комментария, 100 комментариев)
*
* @return string Cлово с правильным окончанием
*/
function ruDeclination($n = 0, $words) {
$words = explode('|', $words);
$n = abs((int) $n); // abs на случай отрицательного значения
return $n % 10 == 1 && $n % 100 != 11 ? $words[0] . $words[1] : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? $words[0] . $words[2] : $words[0] . $words[3]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment