|
| 1 | +type Unit = keyof typeof UnitsMap; |
| 2 | +const UnitsMap = { |
| 3 | + nanosekundy: ['nanosekunda', 'nanosekundy', 'nanosekund'], |
| 4 | + mikrosekundy: ['mikrosekunda', 'mikrosekundy', 'mikrosekund'], |
| 5 | + milisekundy: ['milisekunda', 'milisekundy', 'milisekund'], |
| 6 | + sekundy: ['sekunda', 'sekundy', 'sekund'], |
| 7 | + minuty: ['minuta', 'minuty', 'minut'], |
| 8 | + godziny: ['godzina', 'godziny', 'godzin'], |
| 9 | + dni: ['dzień', 'dni', 'dni'], |
| 10 | + tygodnie: ['tydzień', 'tygodnie', 'tygodni'], |
| 11 | + miesiące: ['miesiąc', 'miesiące', 'miesięcy'], |
| 12 | + lata: ['rok', 'lata', 'lat'], |
| 13 | + dekady: ['dekada', 'dekady', 'dekad'], |
| 14 | + wieki: ['wiek', 'wieki', 'wieków'], |
| 15 | + tysiąclecia: ['tysiąclecie', 'tysiąclecia', 'tysiącleci'], |
| 16 | +} as const; |
| 17 | + |
| 18 | +function formatTime(unit: Unit, count: number) { |
| 19 | + const words = UnitsMap[unit]; |
| 20 | + |
| 21 | + const lastDigit = count % 10; |
| 22 | + const lastTwoDigits = count % 100; |
| 23 | + |
| 24 | + let word: string; |
| 25 | + if (lastTwoDigits >= 11 && lastTwoDigits <= 19) word = words[2]!; |
| 26 | + else if (lastDigit === 1) word = words[0]!; |
| 27 | + else if (lastDigit >= 2 && lastDigit <= 4) word = words[1]!; |
| 28 | + else word = words[2]!; |
| 29 | + |
| 30 | + return word || ''; |
| 31 | +} |
| 32 | + |
| 33 | +export default { |
| 34 | + decimal: ',', |
| 35 | + and: 'i', |
| 36 | + |
| 37 | + units: { |
| 38 | + nanosecond: { |
| 39 | + name: (c) => formatTime('nanosekundy', c), |
| 40 | + abbreviation: 'ns', |
| 41 | + matches: ['ns', 'nanosekunda', 'nanosekundy', 'nanosekund'], |
| 42 | + }, |
| 43 | + microsecond: { |
| 44 | + name: (c) => formatTime('mikrosekundy', c), |
| 45 | + abbreviation: 'μs', |
| 46 | + matches: ['μs', 'us', 'mikrosekunda', 'mikrosekundy', 'mikrosekund'], |
| 47 | + }, |
| 48 | + millisecond: { |
| 49 | + name: (c) => formatTime('milisekundy', c), |
| 50 | + abbreviation: 'ms', |
| 51 | + matches: ['ms', 'milisekunda', 'milisekundy', 'milisekund'], |
| 52 | + }, |
| 53 | + second: { |
| 54 | + name: (c) => formatTime('sekundy', c), |
| 55 | + abbreviation: 's', |
| 56 | + matches: ['s', 'sek', 'sekunda', 'sekundy', 'sekund'], |
| 57 | + }, |
| 58 | + minute: { |
| 59 | + name: (c) => formatTime('minuty', c), |
| 60 | + abbreviation: 'min', |
| 61 | + matches: ['m', 'min', 'minuta', 'minuty', 'minut'], |
| 62 | + }, |
| 63 | + hour: { |
| 64 | + name: (c) => formatTime('godziny', c), |
| 65 | + abbreviation: 'godz.', |
| 66 | + matches: ['h', 'godz', 'godzina', 'godziny', 'godzin'], |
| 67 | + }, |
| 68 | + day: { |
| 69 | + name: (c) => formatTime('dni', c), |
| 70 | + abbreviation: 'd', |
| 71 | + matches: ['d', 'dzień', 'dni'], |
| 72 | + }, |
| 73 | + week: { |
| 74 | + name: (c) => formatTime('tygodnie', c), |
| 75 | + abbreviation: 'tydz.', |
| 76 | + matches: ['w', 'tydz', 'tydzień', 'tygodnie', 'tygodni'], |
| 77 | + }, |
| 78 | + month: { |
| 79 | + name: (c) => formatTime('miesiące', c), |
| 80 | + abbreviation: 'mies.', |
| 81 | + matches: ['mo', 'mies', 'miesiąc', 'miesiące', 'miesięcy'], |
| 82 | + }, |
| 83 | + year: { |
| 84 | + name: (c) => formatTime('lata', c), |
| 85 | + abbreviation: 'r.', |
| 86 | + matches: ['y', 'r', 'rok', 'lata', 'lat'], |
| 87 | + }, |
| 88 | + decade: { |
| 89 | + name: (c) => formatTime('dekady', c), |
| 90 | + abbreviation: 'dek.', |
| 91 | + matches: ['dek', 'dekada', 'dekady', 'dekad'], |
| 92 | + }, |
| 93 | + century: { |
| 94 | + name: (c) => formatTime('wieki', c), |
| 95 | + abbreviation: 'w.', |
| 96 | + matches: ['c', 'wiek', 'wieki', 'wieków'], |
| 97 | + }, |
| 98 | + millennium: { |
| 99 | + name: (c) => formatTime('tysiąclecia', c), |
| 100 | + abbreviation: 'tys.', |
| 101 | + matches: ['mil', 'tys', 'tysiąclecie', 'tysiąclecia', 'tysiącleci'], |
| 102 | + }, |
| 103 | + }, |
| 104 | +} satisfies import('./helpers/definition-types').LanguageDefinition; |
0 commit comments