Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема со склонениями (https://javascript.ru/forum/misc/41799-problema-so-skloneniyami.html)

SVadeX 29.09.2013 20:20

Проблема со склонениями
 
По идее этот код должен склонять слово в соответствии с заданным возрастом:
function text(age) {
	var txt;
	count = age % 100;
	if (count >= 5 && count <= 20) {
		txt = 'лет';
	} else {
		count = count % 10;
		if (count == 1) {
			txt = 'год';
		} else if (count >= 2 && count <= 4) {
			txt = 'года';
		} else {
			txt = 'лет';
		}
	}
	return txt;
}

Тем не менее он не работает, например, с числом 23 — он выдаёт результатом «лет».
Может быть всё просто, и это у меня башка после целого дня работы не варит?

BETEPAH 29.09.2013 20:27

function text(age) {
	var txt;
	count = age % 100;
	if (count >= 5 && count <= 20) {
		txt = 'лет';
	} else {
		count = count % 10;
		if (count == 1) {
			txt = 'год';
		} else if (count >= 2 && count <= 4) {
			txt = 'года';
		} else {
			txt = 'лет';
		}
	}
	return txt;
}
alert(23 + ' ' + text(23));


// функция для склонения слов (значение, (1)"день", (2)"дня", (5)"дней")
function plural(n,str1,str2,str5){return n + ' ' + ((((n%10)==1)&&((n%100)!=11))?(str1):(((((n%10)>=2)&&((n%10)<=4))&&(((n%100)<10)||((n%100)>=20)))?(str2):(str5)))}
alert(plural(23, 'год', 'года', 'лет'));

Яростный Меч 29.09.2013 21:38

в MDN тема раскрыта полностью, для всех известных науке локалей: https://developer.mozilla.org/en-US/...on_and_Plurals

собственно код доступен по ссылке resource://gre/modules/PluralForm.jsm, которую можно открыть только в Firefox.


Часовой пояс GMT +3, время: 11:37.