function declensionGroup (scheme, count) { if (count === 1) { return scheme.one } var rem100 = count % 100 // ends with 11-20 if (rem100 <= 20 && rem100 > 10) { return scheme.other } var rem10 = rem100 % 10 // ends with 2, 3, 4 if (rem10 >= 2 && rem10 <= 4) { return scheme.twoFour } return scheme.other } function declension (scheme, count, time) { time = time || 'regular' var group = declensionGroup(scheme, count) var finalText = group[time] || group return finalText.replace('{{count}}', count) } function buildDistanceInWordsLocale () { var distanceInWordsLocale = { lessThanXSeconds: { one: { regular: 'mniej niż sekunda', past: 'mniej niż sekundę', future: 'mniej niż sekundę' }, twoFour: 'mniej niż {{count}} sekundy', other: 'mniej niż {{count}} sekund' }, xSeconds: { one: { regular: 'sekunda', past: 'sekundę', future: 'sekundę' }, twoFour: '{{count}} sekundy', other: '{{count}} sekund' }, halfAMinute: { one: 'pół minuty', twoFour: 'pół minuty', other: 'pół minuty' }, lessThanXMinutes: { one: { regular: 'mniej niż minuta', past: 'mniej niż minutę', future: 'mniej niż minutę' }, twoFour: 'mniej niż {{count}} minuty', other: 'mniej niż {{count}} minut' }, xMinutes: { one: { regular: 'minuta', past: 'minutę', future: 'minutę' }, twoFour: '{{count}} minuty', other: '{{count}} minut' }, aboutXHours: { one: { regular: 'około godzina', past: 'około godziny', future: 'około godzinę' }, twoFour: 'około {{count}} godziny', other: 'około {{count}} godzin' }, xHours: { one: { regular: 'godzina', past: 'godzinę', future: 'godzinę' }, twoFour: '{{count}} godziny', other: '{{count}} godzin' }, xDays: { one: { regular: 'dzień', past: 'dzień', future: '1 dzień' }, twoFour: '{{count}} dni', other: '{{count}} dni' }, aboutXMonths: { one: 'około miesiąc', twoFour: 'około {{count}} miesiące', other: 'około {{count}} miesięcy' }, xMonths: { one: 'miesiąc', twoFour: '{{count}} miesiące', other: '{{count}} miesięcy' }, aboutXYears: { one: 'około rok', twoFour: 'około {{count}} lata', other: 'około {{count}} lat' }, xYears: { one: 'rok', twoFour: '{{count}} lata', other: '{{count}} lat' }, overXYears: { one: 'ponad rok', twoFour: 'ponad {{count}} lata', other: 'ponad {{count}} lat' }, almostXYears: { one: 'prawie rok', twoFour: 'prawie {{count}} lata', other: 'prawie {{count}} lat' } } function localize (token, count, options) { options = options || {} var scheme = distanceInWordsLocale[token] if (!options.addSuffix) { return declension(scheme, count) } if (options.comparison > 0) { return 'za ' + declension(scheme, count, 'future') } else { return declension(scheme, count, 'past') + ' temu' } } return { localize: localize } } module.exports = buildDistanceInWordsLocale