diff options
Diffstat (limited to 'date-fns/src/locale/ru/_lib/formatDistance/index.js')
-rw-r--r-- | date-fns/src/locale/ru/_lib/formatDistance/index.js | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/date-fns/src/locale/ru/_lib/formatDistance/index.js b/date-fns/src/locale/ru/_lib/formatDistance/index.js new file mode 100644 index 0000000..686777d --- /dev/null +++ b/date-fns/src/locale/ru/_lib/formatDistance/index.js @@ -0,0 +1,247 @@ +function declension(scheme, count) { + // scheme for count=1 exists + if (scheme.one !== undefined && count === 1) { + return scheme.one + } + + var rem10 = count % 10 + var rem100 = count % 100 + + // 1, 21, 31, ... + if (rem10 === 1 && rem100 !== 11) { + return scheme.singularNominative.replace('{{count}}', count) + + // 2, 3, 4, 22, 23, 24, 32 ... + } else if (rem10 >= 2 && rem10 <= 4 && (rem100 < 10 || rem100 > 20)) { + return scheme.singularGenitive.replace('{{count}}', count) + + // 5, 6, 7, 8, 9, 10, 11, ... + } else { + return scheme.pluralGenitive.replace('{{count}}', count) + } +} + +function buildLocalizeTokenFn(scheme) { + return function(count, options) { + if (options.addSuffix) { + if (options.comparison > 0) { + if (scheme.future) { + return declension(scheme.future, count) + } else { + return 'через ' + declension(scheme.regular, count) + } + } else { + if (scheme.past) { + return declension(scheme.past, count) + } else { + return declension(scheme.regular, count) + ' назад' + } + } + } else { + return declension(scheme.regular, count) + } + } +} + +var formatDistanceLocale = { + lessThanXSeconds: buildLocalizeTokenFn({ + regular: { + one: 'меньше секунды', + singularNominative: 'меньше {{count}} секунды', + singularGenitive: 'меньше {{count}} секунд', + pluralGenitive: 'меньше {{count}} секунд' + }, + future: { + one: 'меньше, чем через секунду', + singularNominative: 'меньше, чем через {{count}} секунду', + singularGenitive: 'меньше, чем через {{count}} секунды', + pluralGenitive: 'меньше, чем через {{count}} секунд' + } + }), + + xSeconds: buildLocalizeTokenFn({ + regular: { + singularNominative: '{{count}} секунда', + singularGenitive: '{{count}} секунды', + pluralGenitive: '{{count}} секунд' + }, + past: { + singularNominative: '{{count}} секунду назад', + singularGenitive: '{{count}} секунды назад', + pluralGenitive: '{{count}} секунд назад' + }, + future: { + singularNominative: 'через {{count}} секунду', + singularGenitive: 'через {{count}} секунды', + pluralGenitive: 'через {{count}} секунд' + } + }), + + halfAMinute: function(_, options) { + if (options.addSuffix) { + if (options.comparison > 0) { + return 'через полминуты' + } else { + return 'полминуты назад' + } + } + + return 'полминуты' + }, + + lessThanXMinutes: buildLocalizeTokenFn({ + regular: { + one: 'меньше минуты', + singularNominative: 'меньше {{count}} минуты', + singularGenitive: 'меньше {{count}} минут', + pluralGenitive: 'меньше {{count}} минут' + }, + future: { + one: 'меньше, чем через минуту', + singularNominative: 'меньше, чем через {{count}} минуту', + singularGenitive: 'меньше, чем через {{count}} минуты', + pluralGenitive: 'меньше, чем через {{count}} минут' + } + }), + + xMinutes: buildLocalizeTokenFn({ + regular: { + singularNominative: '{{count}} минута', + singularGenitive: '{{count}} минуты', + pluralGenitive: '{{count}} минут' + }, + past: { + singularNominative: '{{count}} минуту назад', + singularGenitive: '{{count}} минуты назад', + pluralGenitive: '{{count}} минут назад' + }, + future: { + singularNominative: 'через {{count}} минуту', + singularGenitive: 'через {{count}} минуты', + pluralGenitive: 'через {{count}} минут' + } + }), + + aboutXHours: buildLocalizeTokenFn({ + regular: { + singularNominative: 'около {{count}} часа', + singularGenitive: 'около {{count}} часов', + pluralGenitive: 'около {{count}} часов' + }, + future: { + singularNominative: 'приблизительно через {{count}} час', + singularGenitive: 'приблизительно через {{count}} часа', + pluralGenitive: 'приблизительно через {{count}} часов' + } + }), + + xHours: buildLocalizeTokenFn({ + regular: { + singularNominative: '{{count}} час', + singularGenitive: '{{count}} часа', + pluralGenitive: '{{count}} часов' + } + }), + + xDays: buildLocalizeTokenFn({ + regular: { + singularNominative: '{{count}} день', + singularGenitive: '{{count}} дня', + pluralGenitive: '{{count}} дней' + } + }), + + aboutXWeeks: buildLocalizeTokenFn({ + regular: { + singularNominative: 'около {{count}} недели', + singularGenitive: 'около {{count}} недель', + pluralGenitive: 'около {{count}} недель' + }, + future: { + singularNominative: 'приблизительно через {{count}} неделю', + singularGenitive: 'приблизительно через {{count}} недели', + pluralGenitive: 'приблизительно через {{count}} недель' + } + }), + + xWeeks: buildLocalizeTokenFn({ + regular: { + singularNominative: '{{count}} неделя', + singularGenitive: '{{count}} недели', + pluralGenitive: '{{count}} недель' + } + }), + + aboutXMonths: buildLocalizeTokenFn({ + regular: { + singularNominative: 'около {{count}} месяца', + singularGenitive: 'около {{count}} месяцев', + pluralGenitive: 'около {{count}} месяцев' + }, + future: { + singularNominative: 'приблизительно через {{count}} месяц', + singularGenitive: 'приблизительно через {{count}} месяца', + pluralGenitive: 'приблизительно через {{count}} месяцев' + } + }), + + xMonths: buildLocalizeTokenFn({ + regular: { + singularNominative: '{{count}} месяц', + singularGenitive: '{{count}} месяца', + pluralGenitive: '{{count}} месяцев' + } + }), + + aboutXYears: buildLocalizeTokenFn({ + regular: { + singularNominative: 'около {{count}} года', + singularGenitive: 'около {{count}} лет', + pluralGenitive: 'около {{count}} лет' + }, + future: { + singularNominative: 'приблизительно через {{count}} год', + singularGenitive: 'приблизительно через {{count}} года', + pluralGenitive: 'приблизительно через {{count}} лет' + } + }), + + xYears: buildLocalizeTokenFn({ + regular: { + singularNominative: '{{count}} год', + singularGenitive: '{{count}} года', + pluralGenitive: '{{count}} лет' + } + }), + + overXYears: buildLocalizeTokenFn({ + regular: { + singularNominative: 'больше {{count}} года', + singularGenitive: 'больше {{count}} лет', + pluralGenitive: 'больше {{count}} лет' + }, + future: { + singularNominative: 'больше, чем через {{count}} год', + singularGenitive: 'больше, чем через {{count}} года', + pluralGenitive: 'больше, чем через {{count}} лет' + } + }), + + almostXYears: buildLocalizeTokenFn({ + regular: { + singularNominative: 'почти {{count}} год', + singularGenitive: 'почти {{count}} года', + pluralGenitive: 'почти {{count}} лет' + }, + future: { + singularNominative: 'почти через {{count}} год', + singularGenitive: 'почти через {{count}} года', + pluralGenitive: 'почти через {{count}} лет' + } + }) +} + +export default function formatDistance(token, count, options) { + options = options || {} + return formatDistanceLocale[token](count, options) +} |