Давно на Хабре был
пост с решением на разных Я.П.: «Война с роботами: склонение существительных после числительных»
На просторах интернета нашлось более лаконичное решение на JS:
var numToStr = function(num, arrText) {
if (num % 10 === 1 && num % 100 !== 11) {
return arrText[0];
} else if (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)) {
return arrText[1];
}
return arrText[2];
}
Аргументы: число и массив слрв для 1, 2 и 5.
Например:
numToStr(42, ['яблоко', 'яблока', 'яблок']) // "яблока"