From a4087d8a75faf7920f0d1d826aebf99971175347 Mon Sep 17 00:00:00 2001 From: strainu Date: Sat, 23 Dec 2023 00:24:24 +0200 Subject: [PATCH 1/6] Add ro.js locale Added a Romanian locale based on the French version --- lib/locales/ro.js | 50 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 lib/locales/ro.js diff --git a/lib/locales/ro.js b/lib/locales/ro.js new file mode 100644 index 000000000..55acc1c9c --- /dev/null +++ b/lib/locales/ro.js @@ -0,0 +1,50 @@ +/* + * Romanian locale definition. + * See the readme for customization and more information. + * To set this locale globally: + * + * Sugar.Date.setLocale('ro') + * + */ +Sugar.Date.addLocale('ro', { + 'plural': true, + 'units': 'millisecundă:|s,secundă:|s,minut:|s,oră:|s,zi:|s,săptămână:|s,lună,an:|s|născut', + 'months': 'ian:uarie|,feb:ruarie|,mar:tie|,apr:ilie|,mai,iun:ie|,iul:ie|,aug:ust|,sept:embrie|,oct:obrie|,noi:embrie|,dec:embrie|', + 'weekdays': 'dum:inică|,lun:i|,mar:ți|,mier:curi|,joi|,vin:eri|,sâm:bătă|+sam:bata', + 'numerals': 'zero,un:|a,doi,trei,patru,cinci,șase,șapte,opt,nouă,zece', + 'tokens': "al", + 'short': '{dd}/{MM}/{yyyy}', + 'medium': '{d} {month} {yyyy}', + 'long': '{d} {month} {yyyy} {time}', + 'full': '{weekday} {d} {month} {yyyy} {time}', + 'stamp': '{dow} {d} {mon} {yyyy} {time}', + 'time': '{H}:{mm}', + 'past': '{sign} {num} {unit}', + 'future': '{sign} {num} {unit}', + 'duration': '{num} {unit}', + 'timeMarkers': 'la', + 'ampm': 'am,pm', + 'modifiers': [ + { 'name': 'day', 'src': 'ieri', 'value': -1 }, + { 'name': 'day', 'src': "azi", 'value': 0 }, + { 'name': 'day', 'src': 'mâine', 'value': 1 }, + { 'name': 'day', 'src': 'maine', 'value': 1 }, + { 'name': 'sign', 'src': 'acum', 'value': -1 }, + { 'name': 'sign', 'src': "în", 'value': 1 }, + { 'name': 'shift', 'src': 'ultim:ul|a', 'value': -1 }, + { 'name': 'shift', 'src': 'următ:orul|oarea', 'value': 1 } + ], + 'parse': [ + '{months} {year?}', + '{sign} {num} {unit}', + '{0?} {unit:5-7} {shift}' + ], + 'timeParse': [ + '{shift?} {day|weekday}', + '{weekday?},? {0?} {date}{1?} {months}\\.? {year?}' + ], + 'timeFrontParse': [ + '{0?} {shift} {weekday}', + '{weekday?},? {0?} {date}{1?} {months}\\.? {year?}' + ] +}); From 8e8c3ad5e6cd1fee1399520605a0ce0ecdf9ff4d Mon Sep 17 00:00:00 2001 From: strainu Date: Sat, 23 Dec 2023 00:28:08 +0200 Subject: [PATCH 2/6] Correct Romanian units --- lib/locales/ro.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/locales/ro.js b/lib/locales/ro.js index 55acc1c9c..473b9d5c7 100644 --- a/lib/locales/ro.js +++ b/lib/locales/ro.js @@ -8,7 +8,7 @@ */ Sugar.Date.addLocale('ro', { 'plural': true, - 'units': 'millisecundă:|s,secundă:|s,minut:|s,oră:|s,zi:|s,săptămână:|s,lună,an:|s|născut', + 'units': 'millisecund:ă|e,secund:ă|e,minut:|e,or:ă|e,zi:|le,săptămân:ă|i,lun:ă|i,an:|i', 'months': 'ian:uarie|,feb:ruarie|,mar:tie|,apr:ilie|,mai,iun:ie|,iul:ie|,aug:ust|,sept:embrie|,oct:obrie|,noi:embrie|,dec:embrie|', 'weekdays': 'dum:inică|,lun:i|,mar:ți|,mier:curi|,joi|,vin:eri|,sâm:bătă|+sam:bata', 'numerals': 'zero,un:|a,doi,trei,patru,cinci,șase,șapte,opt,nouă,zece', From d60df4d938f5ec71aecb480d1e5b011f15a5438b Mon Sep 17 00:00:00 2001 From: strainu Date: Sat, 23 Dec 2023 00:33:19 +0200 Subject: [PATCH 3/6] Fix shifts --- lib/locales/ro.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/locales/ro.js b/lib/locales/ro.js index 473b9d5c7..3547cd5f3 100644 --- a/lib/locales/ro.js +++ b/lib/locales/ro.js @@ -11,7 +11,7 @@ Sugar.Date.addLocale('ro', { 'units': 'millisecund:ă|e,secund:ă|e,minut:|e,or:ă|e,zi:|le,săptămân:ă|i,lun:ă|i,an:|i', 'months': 'ian:uarie|,feb:ruarie|,mar:tie|,apr:ilie|,mai,iun:ie|,iul:ie|,aug:ust|,sept:embrie|,oct:obrie|,noi:embrie|,dec:embrie|', 'weekdays': 'dum:inică|,lun:i|,mar:ți|,mier:curi|,joi|,vin:eri|,sâm:bătă|+sam:bata', - 'numerals': 'zero,un:|a,doi,trei,patru,cinci,șase,șapte,opt,nouă,zece', + 'numerals': 'zero,un|o,doi,trei,patru,cinci,șase,șapte,opt,nouă,zece', 'tokens': "al", 'short': '{dd}/{MM}/{yyyy}', 'medium': '{d} {month} {yyyy}', @@ -31,8 +31,8 @@ Sugar.Date.addLocale('ro', { { 'name': 'day', 'src': 'maine', 'value': 1 }, { 'name': 'sign', 'src': 'acum', 'value': -1 }, { 'name': 'sign', 'src': "în", 'value': 1 }, - { 'name': 'shift', 'src': 'ultim:ul|a', 'value': -1 }, - { 'name': 'shift', 'src': 'următ:orul|oarea', 'value': 1 } + { 'name': 'shift', 'src': 'acum', 'value': -1 }, + { 'name': 'shift', 'src': 'peste', 'value': 1 } ], 'parse': [ '{months} {year?}', From 7661073ef7e4205ff52f983124a47470d1f7fc63 Mon Sep 17 00:00:00 2001 From: strainu Date: Sat, 23 Dec 2023 00:56:00 +0200 Subject: [PATCH 4/6] Update ro.js --- lib/locales/ro.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/locales/ro.js b/lib/locales/ro.js index 3547cd5f3..d653a7f6f 100644 --- a/lib/locales/ro.js +++ b/lib/locales/ro.js @@ -8,7 +8,7 @@ */ Sugar.Date.addLocale('ro', { 'plural': true, - 'units': 'millisecund:ă|e,secund:ă|e,minut:|e,or:ă|e,zi:|le,săptămân:ă|i,lun:ă|i,an:|i', + 'units': 'milisecund:ă|e,secund:ă|e,minut:|e,or:ă|e,zi:|le,săptămân:ă|i,lun:ă|i,an:|i', 'months': 'ian:uarie|,feb:ruarie|,mar:tie|,apr:ilie|,mai,iun:ie|,iul:ie|,aug:ust|,sept:embrie|,oct:obrie|,noi:embrie|,dec:embrie|', 'weekdays': 'dum:inică|,lun:i|,mar:ți|,mier:curi|,joi|,vin:eri|,sâm:bătă|+sam:bata', 'numerals': 'zero,un|o,doi,trei,patru,cinci,șase,șapte,opt,nouă,zece', @@ -27,12 +27,14 @@ Sugar.Date.addLocale('ro', { 'modifiers': [ { 'name': 'day', 'src': 'ieri', 'value': -1 }, { 'name': 'day', 'src': "azi", 'value': 0 }, + { 'name': 'day', 'src': "astăzi", 'value': 0 }, { 'name': 'day', 'src': 'mâine', 'value': 1 }, { 'name': 'day', 'src': 'maine', 'value': 1 }, { 'name': 'sign', 'src': 'acum', 'value': -1 }, - { 'name': 'sign', 'src': "în", 'value': 1 }, - { 'name': 'shift', 'src': 'acum', 'value': -1 }, - { 'name': 'shift', 'src': 'peste', 'value': 1 } + { 'name': 'sign', 'src': "în|peste", 'value': 1 }, + { 'name': 'shift', 'src': 'trecut:|ă', 'value': -1 }, + { 'name': 'shift', 'src': 'acesta|aceasta', 'value': 0 }, + { 'name': 'shift', 'src': 'viit:or|oare', 'value': 1 } ], 'parse': [ '{months} {year?}', @@ -40,11 +42,11 @@ Sugar.Date.addLocale('ro', { '{0?} {unit:5-7} {shift}' ], 'timeParse': [ - '{shift?} {day|weekday}', + '{day|weekday} {shift?}', '{weekday?},? {0?} {date}{1?} {months}\\.? {year?}' ], 'timeFrontParse': [ - '{0?} {shift} {weekday}', + '{0?} {weekday} {shift}', '{weekday?},? {0?} {date}{1?} {months}\\.? {year?}' ] }); From 76bdaff7e38698d5ccb034a9aefaed574ee9521e Mon Sep 17 00:00:00 2001 From: strainu Date: Sat, 23 Dec 2023 00:56:59 +0200 Subject: [PATCH 5/6] Add tests for Romanian --- test/tests/locales/ro.js | 204 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 test/tests/locales/ro.js diff --git a/test/tests/locales/ro.js b/test/tests/locales/ro.js new file mode 100644 index 000000000..14811a48a --- /dev/null +++ b/test/tests/locales/ro.js @@ -0,0 +1,204 @@ +namespace('Date | French', function () { + 'use strict'; + + var now, then; + + setup(function() { + now = new Date(); + then = new Date(2010, 0, 5, 15, 52); + testSetLocale('fr'); + }); + + method('create', function() { + + assertDateParsed('15 mai 2011', new Date(2011, 4, 15)); + assertDateParsed('5 ianuarie 2012', new Date(2012, 0, 5)); + assertDateParsed('mai 2011', new Date(2011, 4)); + assertDateParsed('15 mai', new Date(now.getFullYear(), 4, 15)); + assertDateParsed('2011', new Date(2011, 0)); + assertDateParsed('02 feb. 2016', new Date(2016, 1, 2)); + assertDateParsed('februarie 2016', new Date(2016, 1)); + + assertDateParsed('5 ianuarie 2012 3:45', new Date(2012, 0, 5, 3, 45)); + assertDateParsed('5 ianuarie 2012 3:45pm', new Date(2012, 0, 5, 15, 45)); + + assertDateParsed('ianuarie', new Date(now.getFullYear(), 0)); + assertDateParsed('februarie', new Date(now.getFullYear(), 1)); + assertDateParsed('martie', new Date(now.getFullYear(), 2)); + assertDateParsed('aprilie', new Date(now.getFullYear(), 3)); + assertDateParsed('mai', new Date(now.getFullYear(), 4)); + assertDateParsed('iunie', new Date(now.getFullYear(), 5)); + assertDateParsed('iulie', new Date(now.getFullYear(), 6)); + assertDateParsed('august', new Date(now.getFullYear(), 7)); + assertDateParsed('septembrie', new Date(now.getFullYear(), 8)); + assertDateParsed('octobrie', new Date(now.getFullYear(), 9)); + assertDateParsed('noiembrie', new Date(now.getFullYear(), 10)); + assertDateParsed('decembrie', new Date(now.getFullYear(), 11)); + + assertDateParsed('duminică', testGetWeekday(0)); + assertDateParsed('luni', testGetWeekday(1)); + assertDateParsed('marți', testGetWeekday(2)); + assertDateParsed('miercuri', testGetWeekday(3)); + assertDateParsed('joi', testGetWeekday(4)); + assertDateParsed('vineri', testGetWeekday(5)); + assertDateParsed('sâmbătă', testGetWeekday(6)); + + + assertDateParsed('acum o milisecundă', getRelativeDate(0,0,0,0,0,0,-1)); + assertDateParsed('acum o secundă', getRelativeDate(0,0,0,0,0,-1)); + assertDateParsed('acum un minut', getRelativeDate(0,0,0,0,-1)); + assertDateParsed('acum o oră', getRelativeDate(0,0,0,-1)); + assertDateParsed('acum o zi', getRelativeDate(0,0,-1)); + assertDateParsed('acum o săptămână', getRelativeDate(0,0,-7)); + assertDateParsed('acum o lună', getRelativeDate(0,-1)); + assertDateParsed('acum un an', getRelativeDate(-1)); + + + assertDateParsed('în 5 milisecunde', getRelativeDate(0,0,0,0,0,0,5)); + assertDateParsed('în 5 secunde', getRelativeDate(0,0,0,0,0,5)); + assertDateParsed('în 5 minute', getRelativeDate(0,0,0,0,5)); + assertDateParsed('în 5 ore', getRelativeDate(0,0,0,5)); + assertDateParsed('în 5 zile', getRelativeDate(0,0,5)); + assertDateParsed('în 5 săptămâni', getRelativeDate(0,0,35)); + assertDateParsed('în 5 luni', getRelativeDate(0,5)); + assertDateParsed('în 5 ani', getRelativeDate(5)); + + assertDateParsed('peste 5 milisecunde', getRelativeDate(0,0,0,0,0,0,5)); + assertDateParsed('peste 5 secunde', getRelativeDate(0,0,0,0,0,5)); + assertDateParsed('peste 5 minute', getRelativeDate(0,0,0,0,5)); + assertDateParsed('peste 5 ore', getRelativeDate(0,0,0,5)); + assertDateParsed('peste 5 zile', getRelativeDate(0,0,5)); + assertDateParsed('peste 5 săptămâni', getRelativeDate(0,0,35)); + assertDateParsed('peste 5 luni', getRelativeDate(0,5)); + assertDateParsed('peste 5 ani', getRelativeDate(5)); + + assertDateParsed('ieri', getRelativeDateReset(0,0,-1)); + assertDateParsed("azi", getRelativeDateReset(0,0,0)); + assertDateParsed('mâine', getRelativeDateReset(0,0,1)); + + assertDateParsed('săptămâna trecută', getRelativeDate(0,0,-7)); + assertDateParsed('săptămâna viitoare', getRelativeDate(0,0,7)); + + assertDateParsed('luna trecută', getRelativeDate(0,-1)); + assertDateParsed('luna viitoare', getRelativeDate(0,1)); + + assertDateParsed("anul trecut", getRelativeDate(-1)); + assertDateParsed("anul viitor", getRelativeDate(1)); + + assertDateParsed('lunea viitoare', testGetWeekday(1, 1)); + assertDateParsed('lunea trecută', testGetWeekday(1,-1)); + + assertDateParsed('lunea trecută la 3:45', testGetWeekday(1, -1, 3, 45)); + + assertDateParsed('17:32 15 mai', new Date(now.getFullYear(), 4, 15, 17, 32)); + assertDateParsed('17:32 lunea viitoare', testGetWeekday(1, 1, 17, 32)); + + assertDateParsed('mâine la 3:30', testDateSet(getRelativeDateReset(0,0,1), {hour:3,minute:30})); + + + // Numbers + + assertDateParsed('acum zero ani', getRelativeDate(0)); + assertDateParsed('acum un an', getRelativeDate(-1)); + assertDateParsed('acum doi ani', getRelativeDate(-2)); + assertDateParsed('acum trei ani', getRelativeDate(-3)); + assertDateParsed('acum patru ani', getRelativeDate(-4)); + assertDateParsed('acum cinci ani', getRelativeDate(-5)); + assertDateParsed('acum șase ani', getRelativeDate(-6)); + assertDateParsed('acum șapte ani', getRelativeDate(-7)); + assertDateParsed('acum opt ani', getRelativeDate(-8)); + assertDateParsed('acum nouă ani', getRelativeDate(-9)); + assertDateParsed('acum zece ani', getRelativeDate(-10)); + + + }); + + method('format', function() { + + test(then, '5 ianuarie 2010 15:52', 'default format'); + + assertFormatShortcut(then, 'short', '05/01/2010'); + assertFormatShortcut(then, 'medium', '5 ianuarie 2010'); + assertFormatShortcut(then, 'long', '5 ianuarie 2010 15:52'); + assertFormatShortcut(then, 'full', 'marți 5 ianuarie 2010 15:52'); + test(then, ['{time}'], '15:52', 'preferred time'); + test(then, ['{stamp}'], 'mar 5 ian 2010 15:52', 'preferred stamp'); + test(then, ['%c'], 'mar 5 ian 2010 15:52', '%c stamp'); + + test(new Date('January 3, 2010'), ['{w}'], '53', 'locale week number | Jan 3 2010'); + test(new Date('January 3, 2010'), ['{ww}'], '53', 'locale week number padded | Jan 3 2010'); + test(new Date('January 3, 2010'), ['{wo}'], '53rd', 'locale week number ordinal | Jan 3 2010'); + test(new Date('January 4, 2010'), ['{w}'], '1', 'locale week number | Jan 4 2010'); + test(new Date('January 4, 2010'), ['{ww}'], '01', 'locale week number padded | Jan 4 2010'); + test(new Date('January 4, 2010'), ['{wo}'], '1st', 'locale week number ordinal | Jan 4 2010'); + + test(new Date(2015, 10, 8), ['{Dow}'], 'dum', 'Sun'); + test(new Date(2015, 10, 9), ['{Dow}'], 'lun', 'Mon'); + test(new Date(2015, 10, 10), ['{Dow}'], 'mar', 'Tue'); + test(new Date(2015, 10, 11), ['{Dow}'], 'mier', 'Wed'); + test(new Date(2015, 10, 12), ['{Dow}'], 'joi', 'Thu'); + test(new Date(2015, 10, 13), ['{Dow}'], 'vin', 'Fri'); + test(new Date(2015, 10, 14), ['{Dow}'], 'sâm', 'Sat'); + + test(new Date(2015, 0, 1), ['{Mon}'], 'ian', 'Jan'); + test(new Date(2015, 1, 1), ['{Mon}'], 'feb', 'Feb'); + test(new Date(2015, 2, 1), ['{Mon}'], 'mar', 'Mar'); + test(new Date(2015, 3, 1), ['{Mon}'], 'apr', 'Apr'); + test(new Date(2015, 4, 1), ['{Mon}'], 'mai', 'May'); + test(new Date(2015, 5, 1), ['{Mon}'], 'iun', 'Jun'); + test(new Date(2015, 6, 1), ['{Mon}'], 'iul', 'Jul'); + test(new Date(2015, 7, 1), ['{Mon}'], 'aug', 'Aug'); + test(new Date(2015, 8, 1), ['{Mon}'], 'sept', 'Sep'); + test(new Date(2015, 9, 1), ['{Mon}'], 'oct', 'Oct'); + test(new Date(2015, 10, 1), ['{Mon}'], 'noi', 'Nov'); + test(new Date(2015, 11, 1), ['{Mon}'], 'dec', 'Dec'); + + }); + + method('relative', function() { + assertRelative('1 second ago', 'acum 1 secundă'); + assertRelative('1 minute ago', 'acum 1 minut'); + assertRelative('1 hour ago', 'acum 1 oră'); + assertRelative('1 day ago', 'acum 1 zi'); + assertRelative('1 week ago', 'acum 1 săptămână'); + assertRelative('1 month ago', 'acum 1 lună'); + assertRelative('1 year ago', 'acum 1 an'); + + assertRelative('2 seconds ago', 'acum 2 secunde'); + assertRelative('2 minutes ago', 'acum 2 minute'); + assertRelative('2 hours ago', 'acum 2 ore'); + assertRelative('2 days ago', 'acum 2 zile'); + assertRelative('2 weeks ago', 'acum 2 săptămâni'); + assertRelative('2 months ago', 'acum 2 luni'); + assertRelative('2 years ago', 'acum 2 ani'); + + assertRelative('1 second from now', 'în 1 secundă'); + assertRelative('1 minute from now', 'în 1 minut'); + assertRelative('1 hour from now', 'în 1 oră'); + assertRelative('1 day from now', 'în 1 zi'); + assertRelative('1 week from now', 'în 1 săptămână'); + assertRelative('1 year from now', 'în 1 an'); + + assertRelative('5 second from now', 'în 5 secunde'); + assertRelative('5 minute from now', 'în 5 minute'); + assertRelative('5 hour from now', 'în 5 ore'); + assertRelative('5 day from now', 'în 5 zile'); + assertRelative('5 week from now', 'în 1 lună'); + assertRelative('5 year from now', 'în 5 ans'); + }); + + method('beginning/end', function() { + equal(run(new Date(2010, 0), 'beginningOfWeek'), new Date(2009, 11, 28), 'beginningOfWeek'); + equal(run(new Date(2010, 0), 'endOfWeek'), new Date(2010, 0, 3, 23, 59, 59, 999), 'endOfWeek'); + }); + + +}); + +namespace('Number | Romanian', function () { + + method('duration', function() { + test(run(5, 'hours'), ['ro'], '5 ore', 'simple duration'); + }); + +}); From 039e57fcf4b8f8618e3cc9213a841ece7b26b6bb Mon Sep 17 00:00:00 2001 From: strainu Date: Sat, 23 Dec 2023 00:58:31 +0200 Subject: [PATCH 6/6] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2f44714dd..a2cecf093 100644 --- a/README.md +++ b/README.md @@ -173,6 +173,7 @@ the Date module. Currently available locales are: - [Norwegian (no)](lib/locales/no.js) - [Polish (pl)](lib/locales/pl.js) - [Portuguese (pt)](lib/locales/pt.js) +- [Romanian (ro)](lib/locales/ro.js) - [Russian (ru)](lib/locales/ru.js) - [Spanish (es)](lib/locales/es.js) - [Swedish (sv)](lib/locales/sv.js)