Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подскажите склонение слов (https://javascript.ru/forum/misc/21010-podskazhite-sklonenie-slov.html)

uExpo 25.08.2011 15:23

Подскажите склонение слов
 
Подскажите как можно склонять слова?

...
1 пользователь
2 пользователя
5 пользователей
...

Kolyaj 25.08.2011 15:29

http://nano.yandex.ru/project/inflect/

uExpo 25.08.2011 15:31

Мне бы на пример простой на JS

melky 25.08.2011 15:32

вас в гугле забанили?

//склонение окончаний
function declension(num, expressions) {
    var result;
    count = num % 100;
    if (count >= 5 && count <= 20) {
        result = expressions['2'];
    } else {
        count = count % 10;
        if (count == 1) {
            result = expressions['0'];
        } else if (count >= 2 && count <= 4) {
            result = expressions['1'];
        } else {
            result = expressions['2'];
        }
    }
    return result;
}

alert ( declension(1, ['пользователь','пользователя','пользователей'])  );
alert ( declension(2, ['пользователь','пользователя','пользователей'])  );
alert ( declension(5, ['пользователь','пользователя','пользователей'])  );

Kolyaj 25.08.2011 15:32

Вы хотите склонять произвольные слова?

uExpo 25.08.2011 15:37

Kolyaj,

1 пользователь
2 пользователя
5 пользователей

Kolyaj 25.08.2011 15:41

Ну тогда вам написали решение.

kukuyok 25.08.2011 17:07

Насколько применимо вообще - не знаю, но задачу, под которую писал, функция решила:
function sklon(num, basic, ed, do4, posle5)
// (число, основа, окончание для ед.ч., для NNN2...NNN4, NNN5...NNN0)
{
	var slovco = basic;
	if(num-Math.floor(num) != 0) slovco += do4;
	else
	{
		//не знаю лучшего способа для обрезания :)
		var sht;
		if(num>=100)
		{
			sht = num*0.01;
			sht = Math.round(sht);
			sht = num - sht*100;
		}
		else	sht = num;	
		
		if(sht>=5 && sht<=20) slovco+=posle5;
		else
		{
			if(sht%10 == 1) slovco+=ed;
			else
			{
				if(sht%10 > 4) slovco+=posle5;			
				else
				{
					if(sht%10 == 0) slovco+=posle5;
					else
					{
						slovco+=do4;
					}
				}
			}
		}
	}
	return slovco;
}

for(var i=0; i<=1001; i++)
{
	var word = sklon(i, 'пользовател', 'ь', 'я', 'ей');
	alert(i+' '+word);
}


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