@schukai/monster 3.92.3 → 3.93.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,671 @@
1
+ /**
2
+ * Copyright © schukai GmbH and all contributing authors, {{copyRightYear}}. All rights reserved.
3
+ * Node module: @schukai/monster
4
+ *
5
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
6
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
7
+ *
8
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
9
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
10
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
11
+ *
12
+ * SPDX-License-Identifier: AGPL-3.0
13
+ */
14
+
15
+ export {formatTimeAgo};
16
+
17
+ /**
18
+ * Format a date as a relative time string with multiple units.
19
+ *
20
+ * @param date
21
+ * @param locale
22
+ * @returns {string}
23
+ */
24
+ function formatTimeAgo(date, locale) {
25
+ const now = new Date(Math.floor(new Date().getTime() / 1000) * 1000);
26
+ const roundedDate = new Date(Math.floor(date.getTime() / 1000) * 1000);
27
+ const diffInSeconds = Math.floor((roundedDate - now) / 1000);
28
+ const absDiff = Math.abs(diffInSeconds);
29
+
30
+ const translation = translations[normalizeLocale(locale)];
31
+
32
+ if (absDiff === 0) {
33
+ return translation.template.justNow();
34
+ }
35
+
36
+ if (absDiff > 31536000) {
37
+ return translation.template.on(new Intl.DateTimeFormat(locale, {
38
+ dateStyle: 'full',
39
+ timeStyle: 'short'
40
+ }).format(date));
41
+ }
42
+
43
+ const units = [
44
+ {name: 'year', length: 31536000}, // Hinzugefügt für Konsistenz, auch wenn nicht genutzt in dieser spezifischen Logik
45
+ {name: 'day', length: 86400},
46
+ {name: 'hour', length: 3600},
47
+ {name: 'minute', length: 60},
48
+ {name: 'second', length: 1},
49
+ ];
50
+
51
+ let remainder = absDiff;
52
+ const parts = [];
53
+
54
+ for (const unit of units) {
55
+ if (remainder >= unit.length) {
56
+ const count = Math.floor(remainder / unit.length);
57
+ remainder %= unit.length;
58
+ const formatted = formatUnitCount(count, unit.name, locale);
59
+ parts.push(formatted);
60
+ }
61
+ }
62
+
63
+ if (parts.length === 0) {
64
+ return translation.template.justNow();
65
+ }
66
+
67
+ const joined = new Intl.ListFormat(locale, {style: 'long', type: 'conjunction'}).format(parts);
68
+ if (diffInSeconds > 0) {
69
+ return translation.template.future(joined);
70
+ } else {
71
+ return translation.template.past(joined);
72
+ }
73
+ }
74
+
75
+ function formatUnitCount(count, unit, locale) {
76
+ const lang = normalizeLocale(locale);
77
+ const fallback = translations[lang] || translations['en'];
78
+ const dictForUnit = fallback.units[unit];
79
+ const pr = new Intl.PluralRules(lang);
80
+ const category = pr.select(count);
81
+ const phrase = dictForUnit[category] || dictForUnit.other;
82
+ return `${count} ${phrase}`;
83
+ }
84
+
85
+ function normalizeLocale(locale) {
86
+ return locale.split('-')[0].toLowerCase();
87
+ }
88
+
89
+
90
+
91
+ /**
92
+ * @private
93
+ */
94
+ const translations = {
95
+ en: {
96
+ template: {
97
+ on: (value) => `on ${value}`,
98
+ past: (value) => `${value} ago`,
99
+ future: (value) => `in ${value}`,
100
+ justNow: () => `just now`,
101
+ },
102
+ units: {
103
+ day: {zero: 'days', one: 'day', two: 'days', few: 'days', many: 'days', other: 'days'},
104
+ hour: {zero: 'hours', one: 'hour', two: 'hours', few: 'hours', many: 'hours', other: 'hours'},
105
+ minute: {zero: 'minutes', one: 'minute', two: 'minutes', few: 'minutes', many: 'minutes', other: 'minutes'},
106
+ second: {zero: 'seconds', one: 'second', two: 'seconds', few: 'seconds', many: 'seconds', other: 'seconds'},
107
+ }
108
+ },
109
+
110
+ zh: {
111
+ template: {
112
+ on: (value) => `在${value}`,
113
+ past: (value) => `${value}前`,
114
+ future: (value) => `${value}后`,
115
+ justNow: () => `刚刚`,
116
+ },
117
+ units: {
118
+ day: {zero: '天', one: '天', two: '天', few: '天', many: '天', other: '天'},
119
+ hour: {zero: '小时', one: '小时', two: '小时', few: '小时', many: '小时', other: '小时'},
120
+ minute: {zero: '分钟', one: '分钟', two: '分钟', few: '分钟', many: '分钟', other: '分钟'},
121
+ second: {zero: '秒', one: '秒', two: '秒', few: '秒', many: '秒', other: '秒'},
122
+ }
123
+ },
124
+
125
+ es: {
126
+ template: {
127
+ on: (value) => `el ${value}`,
128
+ past: (value) => `hace ${value}`,
129
+ future: (value) => `en ${value}`,
130
+ justNow: () => `justo ahora`,
131
+ },
132
+ units: {
133
+ day: {zero: 'días', one: 'día', two: 'días', few: 'días', many: 'días', other: 'días'},
134
+ hour: {zero: 'horas', one: 'hora', two: 'horas', few: 'horas', many: 'horas', other: 'horas'},
135
+ minute: {zero: 'minutos', one: 'minuto', two: 'minutos', few: 'minutos', many: 'minutos', other: 'minutos'},
136
+ second: {
137
+ zero: 'segundos',
138
+ one: 'segundo',
139
+ two: 'segundos',
140
+ few: 'segundos',
141
+ many: 'segundos',
142
+ other: 'segundos'
143
+ },
144
+ }
145
+ },
146
+
147
+ de: {
148
+ template: {
149
+ on: (value) => `am ${value}`,
150
+ past: (value) => `vor ${value}`,
151
+ future: (value) => `in ${value}`,
152
+ justNow: () => `gerade eben`,
153
+ },
154
+ units: {
155
+ day: {zero: 'Tagen', one: 'Tag', two: 'Tagen', few: 'Tagen', many: 'Tagen', other: 'Tagen'},
156
+ hour: {zero: 'Stunden', one: 'Stunde', two: 'Stunden', few: 'Stunden', many: 'Stunden', other: 'Stunden'},
157
+ minute: {zero: 'Minuten', one: 'Minute', two: 'Minuten', few: 'Minuten', many: 'Minuten', other: 'Minuten'},
158
+ second: {
159
+ zero: 'Sekunden',
160
+ one: 'Sekunde',
161
+ two: 'Sekunden',
162
+ few: 'Sekunden',
163
+ many: 'Sekunden',
164
+ other: 'Sekunden'
165
+ },
166
+ }
167
+ },
168
+
169
+ fr: {
170
+ template: {
171
+ on: (value) => `le ${value}`,
172
+ past: (value) => `il y a ${value}`,
173
+ future: (value) => `dans ${value}`,
174
+ justNow: () => `à l'instant`,
175
+ },
176
+ units: {
177
+ day: {zero: 'jours', one: 'jour', two: 'jours', few: 'jours', many: 'jours', other: 'jours'},
178
+ hour: {zero: 'heures', one: 'heure', two: 'heures', few: 'heures', many: 'heures', other: 'heures'},
179
+ minute: {zero: 'minutes', one: 'minute', two: 'minutes', few: 'minutes', many: 'minutes', other: 'minutes'},
180
+ second: {
181
+ zero: 'secondes',
182
+ one: 'seconde',
183
+ two: 'secondes',
184
+ few: 'secondes',
185
+ many: 'secondes',
186
+ other: 'secondes'
187
+ },
188
+ }
189
+ },
190
+
191
+ ru: {
192
+ template: {
193
+ on: (value) => `на ${value}`,
194
+ past: (value) => `${value} назад`,
195
+ future: (value) => `через ${value}`,
196
+ justNow: () => `только что`,
197
+ },
198
+ units: {
199
+ day: {zero: 'дней', one: 'день', two: 'дня', few: 'дня', many: 'дней', other: 'дней'},
200
+ hour: {zero: 'часов', one: 'час', two: 'часа', few: 'часа', many: 'часов', other: 'часов'},
201
+ minute: {zero: 'минут', one: 'минута', two: 'минуты', few: 'минуты', many: 'минут', other: 'минут'},
202
+ second: {zero: 'секунд', one: 'секунда', two: 'секунды', few: 'секунды', many: 'секунд', other: 'секунд'},
203
+ }
204
+ },
205
+
206
+ ar: {
207
+ template: {
208
+ on: (value) => `في ${value}`,
209
+ past: (value) => `منذ ${value}`,
210
+ future: (value) => `بعد ${value}`,
211
+ justNow: () => `الآن`,
212
+ },
213
+ units: {
214
+ day: {zero: 'أيام', one: 'يوم', two: 'يومين', few: 'أيام', many: 'أيام', other: 'أيام'},
215
+ hour: {zero: 'ساعات', one: 'ساعة', two: 'ساعتين', few: 'ساعات', many: 'ساعات', other: 'ساعات'},
216
+ minute: {zero: 'دقائق', one: 'دقيقة', two: 'دقيقتين', few: 'دقائق', many: 'دقائق', other: 'دقائق'},
217
+ second: {zero: 'ثواني', one: 'ثانية', two: 'ثانيتين', few: 'ثواني', many: 'ثواني', other: 'ثواني'},
218
+ }
219
+ },
220
+
221
+ hi: {
222
+ template: {
223
+ on: (value) => `${value} को`,
224
+ past: (value) => `${value} पहले`,
225
+ future: (value) => `${value} में`,
226
+ justNow: () => `अभी`,
227
+ },
228
+ units: {
229
+ day: {zero: 'दिन', one: 'दिन', two: 'दिन', few: 'दिन', many: 'दिन', other: 'दिन'},
230
+ hour: {zero: 'घंटे', one: 'घंटा', two: 'घंटे', few: 'घंटे', many: 'घंटे', other: 'घंटे'},
231
+ minute: {zero: 'मिनट', one: 'मिनट', two: 'मिनट', few: 'मिनट', many: 'मिनट', other: 'मिनट'},
232
+ second: {zero: 'सेकंड', one: 'सेकंड', two: 'सेकंड', few: 'सेकंड', many: 'सेकंड', other: 'सेकंड'},
233
+ }
234
+ },
235
+
236
+ pt: {
237
+ template: {
238
+ on: (value) => `em ${value}`,
239
+ past: (value) => `há ${value}`,
240
+ future: (value) => `em ${value}`,
241
+ justNow: () => `agora mesmo`,
242
+ },
243
+ units: {
244
+ day: {zero: 'dias', one: 'dia', two: 'dias', few: 'dias', many: 'dias', other: 'dias'},
245
+ hour: {zero: 'horas', one: 'hora', two: 'horas', few: 'horas', many: 'horas', other: 'horas'},
246
+ minute: {zero: 'minutos', one: 'minuto', two: 'minutos', few: 'minutos', many: 'minutos', other: 'minutos'},
247
+ second: {
248
+ zero: 'segundos',
249
+ one: 'segundo',
250
+ two: 'segundos',
251
+ few: 'segundos',
252
+ many: 'segundos',
253
+ other: 'segundos'
254
+ },
255
+ }
256
+ },
257
+
258
+ ja: {
259
+ template: {
260
+ on: (value) => `${value}に`,
261
+ past: (value) => `${value}前`,
262
+ future: (value) => `${value}後`,
263
+ justNow: () => `たった今`,
264
+ },
265
+ units: {
266
+ day: {zero: '日', one: '日', two: '日', few: '日', many: '日', other: '日'},
267
+ hour: {zero: '時間', one: '時間', two: '時間', few: '時間', many: '時間', other: '時間'},
268
+ minute: {zero: '分', one: '分', two: '分', few: '分', many: '分', other: '分'},
269
+ second: {zero: '秒', one: '秒', two: '秒', few: '秒', many: '秒', other: '秒'},
270
+ }
271
+ },
272
+
273
+ it: {
274
+ template: {
275
+ on: (value) => `il ${value}`,
276
+ past: (value) => `${value} fa`,
277
+ future: (value) => `in ${value}`,
278
+ justNow: () => `proprio ora`,
279
+ },
280
+ units: {
281
+ day: {zero: 'giorni', one: 'giorno', two: 'giorni', few: 'giorni', many: 'giorni', other: 'giorni'},
282
+ hour: {zero: 'ore', one: 'ora', two: 'ore', few: 'ore', many: 'ore', other: 'ore'},
283
+ minute: {zero: 'minuti', one: 'minuto', two: 'minuti', few: 'minuti', many: 'minuti', other: 'minuti'},
284
+ second: {
285
+ zero: 'secondi',
286
+ one: 'secondo',
287
+ two: 'secondi',
288
+ few: 'secondi',
289
+ many: 'secondi',
290
+ other: 'secondi'
291
+ },
292
+ }
293
+ },
294
+
295
+ ko: {
296
+ template: {
297
+ on: (value) => `${value}에`,
298
+ past: (value) => `${value} 전`,
299
+ future: (value) => `${value} 후`,
300
+ justNow: () => `방금`,
301
+ },
302
+ units: {
303
+ day: {zero: '일', one: '일', two: '일', few: '일', many: '일', other: '일'},
304
+ hour: {zero: '시간', one: '시간', two: '시간', few: '시간', many: '시간', other: '시간'},
305
+ minute: {zero: '분', one: '분', two: '분', few: '분', many: '분', other: '분'},
306
+ second: {zero: '초', one: '초', two: '초', few: '초', many: '초', other: '초'},
307
+ }
308
+ },
309
+
310
+ sw: {
311
+ template: {
312
+ on: (value) => `kwa ${value}`,
313
+ past: (value) => `${value} iliyopita`,
314
+ future: (value) => `katika ${value}`,
315
+ justNow: () => `hivi punde`,
316
+ },
317
+ units: {
318
+ day: {zero: 'siku', one: 'siku', two: 'siku', few: 'siku', many: 'siku', other: 'siku'},
319
+ hour: {zero: 'masaa', one: 'saa', two: 'masaa', few: 'masaa', many: 'masaa', other: 'masaa'},
320
+ minute: {zero: 'dakika', one: 'dakika', two: 'dakika', few: 'dakika', many: 'dakika', other: 'dakika'},
321
+ second: {
322
+ zero: 'sekunde',
323
+ one: 'sekunde',
324
+ two: 'sekunde',
325
+ few: 'sekunde',
326
+ many: 'sekunde',
327
+ other: 'sekunde'
328
+ },
329
+ }
330
+ },
331
+
332
+ nl: {
333
+ template: {
334
+ on: (value) => `op ${value}`,
335
+ past: (value) => `${value} geleden`,
336
+ future: (value) => `over ${value}`,
337
+ justNow: () => `net`,
338
+ },
339
+ units: {
340
+ day: {zero: 'dagen', one: 'dag', two: 'dagen', few: 'dagen', many: 'dagen', other: 'dagen'},
341
+ hour: {zero: 'uren', one: 'uur', two: 'uren', few: 'uren', many: 'uren', other: 'uren'},
342
+ minute: {zero: 'minuten', one: 'minuut', two: 'minuten', few: 'minuten', many: 'minuten', other: 'minuten'},
343
+ second: {
344
+ zero: 'seconden',
345
+ one: 'seconde',
346
+ two: 'seconden',
347
+ few: 'seconden',
348
+ many: 'seconden',
349
+ other: 'seconden'
350
+ },
351
+ }
352
+ },
353
+
354
+ ms: {
355
+ template: {
356
+ on: (value) => `pada ${value}`,
357
+ past: (value) => `${value} yang lalu`,
358
+ future: (value) => `${value} lagi`,
359
+ justNow: () => `tadi`,
360
+ },
361
+ units: {
362
+ day: {zero: 'hari', one: 'hari', two: 'hari', few: 'hari', many: 'hari', other: 'hari'},
363
+ hour: {zero: 'jam', one: 'jam', two: 'jam', few: 'jam', many: 'jam', other: 'jam'},
364
+ minute: {zero: 'minit', one: 'minit', two: 'minit', few: 'minit', many: 'minit', other: 'minit'},
365
+ second: {zero: 'saat', one: 'saat', two: 'saat', few: 'saat', many: 'saat', other: 'saat'},
366
+ }
367
+ },
368
+
369
+ id: {
370
+ template: {
371
+ on: (value) => `pada ${value}`,
372
+ past: (value) => `${value} yang lalu`,
373
+ future: (value) => `dalam ${value}`,
374
+ justNow: () => `tadi`,
375
+ },
376
+ units: {
377
+ day: {zero: 'hari', one: 'hari', two: 'hari', few: 'hari', many: 'hari', other: 'hari'},
378
+ hour: {zero: 'jam', one: 'jam', two: 'jam', few: 'jam', many: 'jam', other: 'jam'},
379
+ minute: {zero: 'menit', one: 'menit', two: 'menit', few: 'menit', many: 'menit', other: 'menit'},
380
+ second: {zero: 'detik', one: 'detik', two: 'detik', few: 'detik', many: 'detik', other: 'detik'},
381
+ }
382
+ },
383
+
384
+ tr: {
385
+ template: {
386
+ on: (value) => `${value} tarihinde`,
387
+ past: (value) => `${value} önce`,
388
+ future: (value) => `${value} sonra`,
389
+ justNow: () => `az önce`,
390
+ },
391
+ units: {
392
+ day: {zero: 'günler', one: 'gün', two: 'gün', few: 'gün', many: 'gün', other: 'gün'},
393
+ hour: {zero: 'saatler', one: 'saat', two: 'saat', few: 'saat', many: 'saat', other: 'saat'},
394
+ minute: {zero: 'dakikalar', one: 'dakika', two: 'dakika', few: 'dakika', many: 'dakika', other: 'dakika'},
395
+ second: {zero: 'saniyeler', one: 'saniye', two: 'saniye', few: 'saniye', many: 'saniye', other: 'saniye'},
396
+ }
397
+ },
398
+
399
+ pl: {
400
+ template: {
401
+ on: (value) => `w dniu ${value}`,
402
+ past: (value) => `${value} temu`,
403
+ future: (value) => `za ${value}`,
404
+ justNow: () => `przed chwilą`,
405
+ },
406
+ units: {
407
+ day: {zero: 'dni', one: 'dzień', two: 'dni', few: 'dni', many: 'dni', other: 'dni'},
408
+ hour: {zero: 'godzin', one: 'godzina', two: 'godziny', few: 'godziny', many: 'godzin', other: 'godzin'},
409
+ minute: {zero: 'minut', one: 'minuta', two: 'minuty', few: 'minuty', many: 'minut', other: 'minut'},
410
+ second: {zero: 'sekund', one: 'sekunda', two: 'sekundy', few: 'sekundy', many: 'sekund', other: 'sekund'},
411
+ }
412
+ },
413
+
414
+ sv: {
415
+ template: {
416
+ on: (value) => `den ${value}`,
417
+ past: (value) => `för ${value} sedan`,
418
+ future: (value) => `om ${value}`,
419
+ justNow: () => `nyss`,
420
+ },
421
+ units: {
422
+ day: {zero: 'dagar', one: 'dag', two: 'dagar', few: 'dagar', many: 'dagar', other: 'dagar'},
423
+ hour: {zero: 'timmar', one: 'timme', two: 'timmar', few: 'timmar', many: 'timmar', other: 'timmar'},
424
+ minute: {zero: 'minuter', one: 'minut', two: 'minuter', few: 'minuter', many: 'minuter', other: 'minuter'},
425
+ second: {
426
+ zero: 'sekunder',
427
+ one: 'sekund',
428
+ two: 'sekunder',
429
+ few: 'sekunder',
430
+ many: 'sekunder',
431
+ other: 'sekunder'
432
+ },
433
+ }
434
+ },
435
+
436
+
437
+ ro: {
438
+ template: {
439
+ on: (value) => `pe ${value}`,
440
+ past: (value) => `acum ${value}`,
441
+ future: (value) => `peste ${value}`,
442
+ justNow: () => `chiar acum`,
443
+ },
444
+ units: {
445
+ day: {zero: 'zile', one: 'zi', two: 'zile', few: 'zile', many: 'zile', other: 'zile'},
446
+ hour: {zero: 'ore', one: 'oră', two: 'ore', few: 'ore', many: 'ore', other: 'ore'},
447
+ minute: {zero: 'minute', one: 'minut', two: 'minute', few: 'minute', many: 'minute', other: 'minute'},
448
+ second: {
449
+ zero: 'secunde',
450
+ one: 'secundă',
451
+ two: 'secunde',
452
+ few: 'secunde',
453
+ many: 'secunde',
454
+ other: 'secunde'
455
+ },
456
+ }
457
+ },
458
+
459
+ bg: {
460
+ template: {
461
+ on: (value) => `на ${value}`,
462
+ past: (value) => `преди ${value}`,
463
+ future: (value) => `след ${value}`,
464
+ justNow: () => `току-що`,
465
+ },
466
+ units: {
467
+ day: {zero: 'дни', one: 'ден', two: 'дни', few: 'дни', many: 'дни', other: 'дни'},
468
+ hour: {zero: 'часа', one: 'час', two: 'часа', few: 'часа', many: 'часа', other: 'часа'},
469
+ minute: {zero: 'минути', one: 'минута', two: 'минути', few: 'минути', many: 'минути', other: 'минути'},
470
+ second: {
471
+ zero: 'секунди',
472
+ one: 'секунда',
473
+ two: 'секунди',
474
+ few: 'секунди',
475
+ many: 'секунди',
476
+ other: 'секунди'
477
+ },
478
+ }
479
+ },
480
+
481
+ da: {
482
+ template: {
483
+ on: (value) => `den ${value}`,
484
+ past: (value) => `for ${value} siden`,
485
+ future: (value) => `om ${value}`,
486
+ justNow: () => `lige nu`,
487
+ },
488
+ units: {
489
+ day: {zero: 'dage', one: 'dag', two: 'dage', few: 'dage', many: 'dage', other: 'dage'},
490
+ hour: {zero: 'timer', one: 'time', two: 'timer', few: 'timer', many: 'timer', other: 'timer'},
491
+ minute: {
492
+ zero: 'minutter',
493
+ one: 'minut',
494
+ two: 'minutter',
495
+ few: 'minutter',
496
+ many: 'minutter',
497
+ other: 'minutter'
498
+ },
499
+ second: {
500
+ zero: 'sekunder',
501
+ one: 'sekund',
502
+ two: 'sekunder',
503
+ few: 'sekunder',
504
+ many: 'sekunder',
505
+ other: 'sekunder'
506
+ },
507
+ }
508
+ },
509
+
510
+ fi: {
511
+ template: {
512
+ on: (value) => `päivänä ${value}`,
513
+ past: (value) => `${value} sitten`,
514
+ future: (value) => `${value} kuluttua`,
515
+ justNow: () => `juuri nyt`,
516
+ },
517
+ units: {
518
+ day: {zero: 'päivää', one: 'päivä', two: 'päivää', few: 'päivää', many: 'päivää', other: 'päivää'},
519
+ hour: {zero: 'tuntia', one: 'tunti', two: 'tuntia', few: 'tuntia', many: 'tuntia', other: 'tuntia'},
520
+ minute: {
521
+ zero: 'minuuttia',
522
+ one: 'minuutti',
523
+ two: 'minuuttia',
524
+ few: 'minuuttia',
525
+ many: 'minuuttia',
526
+ other: 'minuuttia'
527
+ },
528
+ second: {
529
+ zero: 'sekuntia',
530
+ one: 'sekunti',
531
+ two: 'sekuntia',
532
+ few: 'sekuntia',
533
+ many: 'sekuntia',
534
+ other: 'sekuntia'
535
+ },
536
+ }
537
+ },
538
+
539
+ cs: {
540
+ template: {
541
+ on: (value) => `dne ${value}`,
542
+ past: (value) => `před ${value}`,
543
+ future: (value) => `za ${value}`,
544
+ justNow: () => `právě teď`,
545
+ },
546
+ units: {
547
+ day: {zero: 'dny', one: 'den', two: 'dny', few: 'dny', many: 'dnů', other: 'dny'},
548
+ hour: {zero: 'hodin', one: 'hodina', two: 'hodiny', few: 'hodiny', many: 'hodin', other: 'hodin'},
549
+ minute: {zero: 'minut', one: 'minuta', two: 'minuty', few: 'minuty', many: 'minut', other: 'minut'},
550
+ second: {zero: 'sekund', one: 'sekunda', two: 'sekundy', few: 'sekundy', many: 'sekund', other: 'sekund'},
551
+ }
552
+ },
553
+
554
+ el: {
555
+ template: {
556
+ on: (value) => `στις ${value}`,
557
+ past: (value) => `πριν ${value}`,
558
+ future: (value) => `σε ${value}`,
559
+ justNow: () => `μόλις τώρα`,
560
+ },
561
+ units: {
562
+ day: {zero: 'ημέρες', one: 'ημέρα', two: 'ημέρες', few: 'ημέρες', many: 'ημέρες', other: 'ημέρες'},
563
+ hour: {zero: 'ώρες', one: 'ώρα', two: 'ώρες', few: 'ώρες', many: 'ώρες', other: 'ώρες'},
564
+ minute: {zero: 'λεπτά', one: 'λεπτό', two: 'λεπτά', few: 'λεπτά', many: 'λεπτά', other: 'λεπτά'},
565
+ second: {
566
+ zero: 'δευτερόλεπτα',
567
+ one: 'δευτερόλεπτο',
568
+ two: 'δευτερόλεπτα',
569
+ few: 'δευτερόλεπτα',
570
+ many: 'δευτερόλεπτα',
571
+ other: 'δευτερόλεπτα'
572
+ },
573
+ }
574
+ },
575
+
576
+ hr: {
577
+ template: {
578
+ on: (value) => `na ${value}`,
579
+ past: (value) => `prije ${value}`,
580
+ future: (value) => `za ${value}`,
581
+ justNow: () => `prije trenutka`,
582
+ },
583
+ units: {
584
+ day: {zero: 'dana', one: 'dan', two: 'dana', few: 'dana', many: 'dana', other: 'dana'},
585
+ hour: {zero: 'sati', one: 'sat', two: 'sata', few: 'sata', many: 'sati', other: 'sati'},
586
+ minute: {zero: 'minuta', one: 'minuta', two: 'minute', few: 'minute', many: 'minuta', other: 'minuta'},
587
+ second: {
588
+ zero: 'sekundi',
589
+ one: 'sekunda',
590
+ two: 'sekunde',
591
+ few: 'sekunde',
592
+ many: 'sekundi',
593
+ other: 'sekundi'
594
+ },
595
+ }
596
+ },
597
+
598
+ sk: {
599
+ template: {
600
+ on: (value) => `v deň ${value}`,
601
+ past: (value) => `pred ${value}`,
602
+ future: (value) => `za ${value}`,
603
+ justNow: () => `práve teraz`,
604
+ },
605
+ units: {
606
+ day: {zero: 'dni', one: 'deň', two: 'dni', few: 'dni', many: 'dní', other: 'dni'},
607
+ hour: {zero: 'hodiny', one: 'hodina', two: 'hodiny', few: 'hodiny', many: 'hodín', other: 'hodiny'},
608
+ minute: {zero: 'minúty', one: 'minúta', two: 'minúty', few: 'minúty', many: 'minút', other: 'minúty'},
609
+ second: {zero: 'sekundy', one: 'sekunda', two: 'sekundy', few: 'sekundy', many: 'sekúnd', other: 'sekundy'},
610
+ }
611
+ },
612
+
613
+ no: {
614
+ template: {
615
+ on: (value) => `på ${value}`,
616
+ past: (value) => `${value} siden`,
617
+ future: (value) => `om ${value}`,
618
+ justNow: () => `nettopp`,
619
+ },
620
+ units: {
621
+ day: {zero: 'dager', one: 'dag', two: 'dager', few: 'dager', many: 'dager', other: 'dager'},
622
+ hour: {zero: 'timer', one: 'time', two: 'timer', few: 'timer', many: 'timer', other: 'timer'},
623
+ minute: {
624
+ zero: 'minutter',
625
+ one: 'minutt',
626
+ two: 'minutter',
627
+ few: 'minutter',
628
+ many: 'minutter',
629
+ other: 'minutter'
630
+ },
631
+ second: {
632
+ zero: 'sekunder',
633
+ one: 'sekund',
634
+ two: 'sekunder',
635
+ few: 'sekunder',
636
+ many: 'sekunder',
637
+ other: 'sekunder'
638
+ },
639
+ }
640
+ },
641
+
642
+ sl: {
643
+ template: {
644
+ on: (value) => `na ${value}`,
645
+ past: (value) => `pred ${value}`,
646
+ future: (value) => `čez ${value}`,
647
+ justNow: () => `ravno zdaj`,
648
+ },
649
+ units: {
650
+ day: {zero: 'dni', one: 'dan', two: 'dni', few: 'dni', many: 'dni', other: 'dni'},
651
+ hour: {zero: 'ure', one: 'ura', two: 'ure', few: 'ure', many: 'ure', other: 'ure'},
652
+ minute: {zero: 'minute', one: 'minuta', two: 'minute', few: 'minute', many: 'minute', other: 'minute'},
653
+ second: {zero: 'sekunde', one: 'sekunda', two: 'sekunde', few: 'sekunde', many: 'sekund', other: 'sekund'},
654
+ }
655
+ },
656
+
657
+ vi: {
658
+ template: {
659
+ on: (value) => `vào ${value}`,
660
+ past: (value) => `${value} trước`,
661
+ future: (value) => `${value} sau`,
662
+ justNow: () => `vừa mới`,
663
+ },
664
+ units: {
665
+ day: {zero: 'ngày', one: 'ngày', two: 'ngày', few: 'ngày', many: 'ngày', other: 'ngày'},
666
+ hour: {zero: 'giờ', one: 'giờ', two: 'giờ', few: 'giờ', many: 'giờ', other: 'giờ'},
667
+ minute: {zero: 'phút', one: 'phút', two: 'phút', few: 'phút', many: 'phút', other: 'phút'},
668
+ second: {zero: 'giây', one: 'giây', two: 'giây', few: 'giây', many: 'giây', other: 'giây'},
669
+ }
670
+ },
671
+ };