Last active
December 17, 2015 14:39
-
-
Save A/5626045 to your computer and use it in GitHub Desktop.
Написал JavaScript функцию, которая правильно склоняет единицы измерения числительных, например «1 час», «11 минут», «21 грамм», «5 толстых шлюх».
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Функция возвращает строку с числом и названием единиц измерения (например '1 час', '11 минут', '21 грамм', '5 толстых шлюх'). | |
* @param {Number} number Число | |
* @param {String} nominative Название единиц измерения в иминительном падеже и ед.числе (час, минута) | |
* @param {String} genitive Название единиц измерения в родительном падеже и ед.числе (часа, минуты) | |
* @param {String} genitive_pl Название единиц измерения в родительном падеже и ед.числе (часов, минут) | |
* @param {Bool} showZero Показывать ли результат, если number = 0 | |
* @return {String} '5 минут', '11 часов', '1 грамм' | |
*/ | |
var getDeclinedNumeralStringForRussian = function (number, nominative, genitive, genitive_pl, showZero) { | |
if (!showZero && !number) { return ''; } | |
var cases = [nominative,genitive,genitive_pl]; | |
if (number%100>4 && number%100<20) { | |
return number+' '+cases[2]; | |
} else { | |
var refs = [2,0,1,1,1,2]; | |
return number+' '+cases[refs[(number%10<5)?number%10:5]]; | |
} | |
}; |
Да, у тебе здорово получилось, пожалуй на этом варианте и остановлюсь, спасибо!
Кстати, я последнее время вместо parseInt() пишу |0
, очень удобно.
http://habrahabr.ru/post/172731/
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
А вот мой вариант:
Вообще, лучше не заниматься склеиванием строк, а использовать библиотеки локализации и форматирования.
Я в своё время смотрел на https://github.com/SlexAxton/messageformat.js — очень мощная и гибкая система локализации. Но не стал таки её внедрять в проект из-за её большого объёма. У меня используется самописный вариант для форматирования русских строк. Других языков больше нет.