From b134c42bb1a77575f3a64e827bec1bcbe3d10b20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93li=20T=C3=B3mas?= Date: Mon, 20 Jul 2020 03:28:38 +0000 Subject: [PATCH 1/4] Added icelandic, along with tests --- .gitignore | 2 +- __tests__/lang/is.spec.ts | 107 ++++++++++++++++++++++++++++++++++++++ src/lang/is.ts | 22 ++++++++ 3 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 __tests__/lang/is.spec.ts create mode 100644 src/lang/is.ts diff --git a/.gitignore b/.gitignore index 2f22da2..4f1387a 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,4 @@ esm dist timeago.full.min.js -timeago.min.js +timeago.min.js \ No newline at end of file diff --git a/__tests__/lang/is.spec.ts b/__tests__/lang/is.spec.ts new file mode 100644 index 0000000..be65c58 --- /dev/null +++ b/__tests__/lang/is.spec.ts @@ -0,0 +1,107 @@ +/** + * Created by hustcc on 18/5/24. + * Contact: i@hust.cc + */ +import { advanceTo, clear } from 'jest-date-mock'; +import { format, register } from '../../src'; +import is from '../../src/lang/is'; + +register('is', is); + +let date = new Date(); + +beforeEach(() => { + advanceTo(0); + date = new Date(); +}); +afterEach(() => { + clear(); +}); +describe('is', () => { + test('time ago', () => { + advanceTo(9 * 1000); + expect(format(date, 'is')).toEqual('rétt í þessu'); + + advanceTo(30 * 1000); + expect(format(date, 'is')).toEqual('30 sekúndum síðan'); + + advanceTo(1000 * 60); + expect(format(date, 'is')).toEqual('1 mínútu síðan'); + + advanceTo(1000 * 60 * 30); + expect(format(date, 'is')).toEqual('30 mínútum síðan'); + + advanceTo(1000 * 60 * 60); + expect(format(date, 'is')).toEqual('1 klukkutíma síðan'); + + advanceTo(1000 * 60 * 60 * 8); + expect(format(date, 'is')).toEqual('8 klukkutímum síðan'); + + advanceTo(1000 * 60 * 60 * 24); + expect(format(date, 'is')).toEqual('1 degi síðan'); + + advanceTo(1000 * 60 * 60 * 24 * 3); + expect(format(date, 'is')).toEqual('3 dögum síðan'); + + advanceTo(1000 * 60 * 60 * 24 * 7); + expect(format(date, 'is')).toEqual('1 viku síðan'); + + advanceTo(1000 * 60 * 60 * 24 * 7 * 3); + expect(format(date, 'is')).toEqual('3 vikum síðan'); + + advanceTo(1000 * 60 * 60 * 24 * 31); + expect(format(date, 'is')).toEqual('1 mánuði síðan'); + + advanceTo(1000 * 60 * 60 * 24 * 31 * 4); + expect(format(date, 'is')).toEqual('4 mánuðum síðan'); + + advanceTo(1000 * 60 * 60 * 24 * 366); + expect(format(date, 'is')).toEqual('1 ári síðan'); + + advanceTo(1000 * 60 * 60 * 24 * 366 * 10); + expect(format(date, 'is')).toEqual('10 árum síðan'); + }); + test('time in', () => { + advanceTo(-9 * 1000); + expect(format(date, 'is')).toEqual('núna'); + + advanceTo(-30 * 1000); + expect(format(date, 'is')).toEqual('eftir 30 sekúndur'); + + advanceTo(-1000 * 60); + expect(format(date, 'is')).toEqual('eftir 1 mínútu'); + + advanceTo(-1000 * 60 * 30); + expect(format(date, 'is')).toEqual('eftir 30 mínútur'); + + advanceTo(-1000 * 60 * 60); + expect(format(date, 'is')).toEqual('eftir 1 klukkutíma'); + + advanceTo(-1000 * 60 * 60 * 8); + expect(format(date, 'is')).toEqual('eftir 8 klukkutíma'); + + advanceTo(-1000 * 60 * 60 * 24); + expect(format(date, 'is')).toEqual('eftir 1 dag'); + + advanceTo(-1000 * 60 * 60 * 24 * 3); + expect(format(date, 'is')).toEqual('eftir 3 daga'); + + advanceTo(-1000 * 60 * 60 * 24 * 7); + expect(format(date, 'is')).toEqual('eftir 1 viku'); + + advanceTo(-1000 * 60 * 60 * 24 * 7 * 3); + expect(format(date, 'is')).toEqual('eftir 3 vikur'); + + advanceTo(-1000 * 60 * 60 * 24 * 31); + expect(format(date, 'is')).toEqual('eftir 1 mánuð'); + + advanceTo(-1000 * 60 * 60 * 24 * 31 * 4); + expect(format(date, 'is')).toEqual('eftir 4 mánuði'); + + advanceTo(-1000 * 60 * 60 * 24 * 366); + expect(format(date, 'is')).toEqual('eftir 1 ár'); + + advanceTo(-1000 * 60 * 60 * 24 * 366 * 10); + expect(format(date, 'is')).toEqual('eftir 10 ár'); + }); +}); diff --git a/src/lang/is.ts b/src/lang/is.ts new file mode 100644 index 0000000..7c4a338 --- /dev/null +++ b/src/lang/is.ts @@ -0,0 +1,22 @@ +const is = ['sekúnd', 'mínút', 'klukkutím', 'd', 'vik', 'mánuð', 'ár']; +const plural_in = ['ur', 'ur', 'a', 'aga', 'ur', 'i', '']; +const plural_ago = ['um', 'um', 'um', 'ögum', 'um', 'um', 'um']; + +const singular_in = ['u', 'u', 'a', 'ag', 'u', '', '']; +const singular_ago = ['u', 'u', 'a', 'egi', 'u', 'i', 'i']; + +export default function(diff: number, idx: number): [string, string] { + if (idx === 0) return ['rétt í þessu', 'núna']; + const is_indx = Math.floor(idx / 2); + const unit = is[is_indx]; + let unit_in, unit_ago; + if (diff === 1) { + unit_in = singular_in[is_indx]; + unit_ago = singular_ago[is_indx]; + } else { + unit_in = plural_in[is_indx]; + unit_ago = plural_ago[is_indx]; + } + + return [`${diff} ${unit + unit_ago} síðan`, `eftir ${diff} ${unit + unit_in}`]; +} From 623e03514e9951ee091950b547e8b5ae964ccb98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93li=20T=C3=B3mas?= Date: Mon, 20 Jul 2020 19:38:03 +0000 Subject: [PATCH 2/4] =?UTF-8?q?Fix=20for=20quirky=20icelandic=20rule=20whe?= =?UTF-8?q?re=20singular=20is=20to=20be=20used=20if=20the=20last=20digit?= =?UTF-8?q?=20is=201=20(except=20for=2011=20=F0=9F=98=82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __tests__/lang/is.spec.ts | 6 ++++++ src/lang/is.ts | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/__tests__/lang/is.spec.ts b/__tests__/lang/is.spec.ts index be65c58..ddffa2b 100644 --- a/__tests__/lang/is.spec.ts +++ b/__tests__/lang/is.spec.ts @@ -68,12 +68,18 @@ describe('is', () => { advanceTo(-30 * 1000); expect(format(date, 'is')).toEqual('eftir 30 sekúndur'); + advanceTo(-21 * 1000); + expect(format(date, 'is')).toEqual('eftir 21 sekúndu'); + advanceTo(-1000 * 60); expect(format(date, 'is')).toEqual('eftir 1 mínútu'); advanceTo(-1000 * 60 * 30); expect(format(date, 'is')).toEqual('eftir 30 mínútur'); + advanceTo(-1000 * 60 * 31); + expect(format(date, 'is')).toEqual('eftir 31 mínútu'); + advanceTo(-1000 * 60 * 60); expect(format(date, 'is')).toEqual('eftir 1 klukkutíma'); diff --git a/src/lang/is.ts b/src/lang/is.ts index 7c4a338..aaaae1e 100644 --- a/src/lang/is.ts +++ b/src/lang/is.ts @@ -10,7 +10,7 @@ export default function(diff: number, idx: number): [string, string] { const is_indx = Math.floor(idx / 2); const unit = is[is_indx]; let unit_in, unit_ago; - if (diff === 1) { + if (diff === 1 || (diff > 20 && parseInt(diff.toString().slice(-1)) === 1)) { unit_in = singular_in[is_indx]; unit_ago = singular_ago[is_indx]; } else { From b3df3fdc621850a0390ecef4fb94c5810574bdc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93li=20T=C3=B3mas?= Date: Mon, 20 Jul 2020 23:09:47 +0000 Subject: [PATCH 3/4] Fix to logic after help from the icelandic software community on FB (Thanks Hreinn Beck) --- src/lang/is.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/is.ts b/src/lang/is.ts index aaaae1e..b257178 100644 --- a/src/lang/is.ts +++ b/src/lang/is.ts @@ -10,7 +10,7 @@ export default function(diff: number, idx: number): [string, string] { const is_indx = Math.floor(idx / 2); const unit = is[is_indx]; let unit_in, unit_ago; - if (diff === 1 || (diff > 20 && parseInt(diff.toString().slice(-1)) === 1)) { + if (diff % 10 === 1 && diff !== 11) { unit_in = singular_in[is_indx]; unit_ago = singular_ago[is_indx]; } else { From 70b49c87ccd823b96458a22c2f4f0b939cca18c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93li=20T=C3=B3mas?= Date: Mon, 11 Jan 2021 18:42:36 +0000 Subject: [PATCH 4/4] Fixed contact info --- __tests__/lang/is.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/__tests__/lang/is.spec.ts b/__tests__/lang/is.spec.ts index ddffa2b..cced76e 100644 --- a/__tests__/lang/is.spec.ts +++ b/__tests__/lang/is.spec.ts @@ -1,6 +1,6 @@ /** - * Created by hustcc on 18/5/24. - * Contact: i@hust.cc + * Created by Óli Tómas + * Contact: olitomas@olitomas.com */ import { advanceTo, clear } from 'jest-date-mock'; import { format, register } from '../../src';