Skip to content

Commit

Permalink
feat(datepicker): added Lithuanian locale support for datepicker (#4787)
Browse files Browse the repository at this point in the history
  • Loading branch information
ixoster authored and valorkin committed Nov 15, 2018
1 parent 50507e4 commit 87e3751
Show file tree
Hide file tree
Showing 6 changed files with 363 additions and 6 deletions.
10 changes: 4 additions & 6 deletions demo/src/app/components/+datepicker/demo-datepicker.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@ import { defineLocale, LocaleData } from 'ngx-bootstrap/chronos';
import { BsDatepickerModule, DatepickerModule } from 'ngx-bootstrap/datepicker';
import {
arLocale, csLocale, daLocale, deLocale, enGbLocale, esDoLocale, esLocale, esUsLocale, frLocale, heLocale, hiLocale,
fiLocale, glLocale,
huLocale, idLocale, itLocale, jaLocale, koLocale, mnLocale, nbLocale, nlBeLocale, nlLocale, plLocale, ptBrLocale,
ruLocale, roLocale, skLocale, slLocale, svLocale, thLocale, trLocale, zhCnLocale
fiLocale, glLocale, huLocale, idLocale, itLocale, jaLocale, koLocale, ltLocale, mnLocale, nbLocale, nlBeLocale,
nlLocale, plLocale, ptBrLocale, ruLocale, roLocale, skLocale, slLocale, svLocale, thLocale, trLocale, zhCnLocale
} from 'ngx-bootstrap/locale';
import { TabsModule } from 'ngx-bootstrap/tabs';

Expand All @@ -20,9 +19,8 @@ import { DEMO_COMPONENTS } from './demos';

const locales = [
arLocale, csLocale, daLocale, deLocale, enGbLocale, esDoLocale, esLocale, esUsLocale, frLocale, heLocale, hiLocale,
fiLocale, glLocale,
huLocale, idLocale, itLocale, jaLocale, koLocale, mnLocale, nbLocale, nlBeLocale, nlLocale, plLocale, ptBrLocale,
ruLocale, roLocale, skLocale, slLocale, svLocale, thLocale, trLocale, zhCnLocale
fiLocale, glLocale, huLocale, idLocale, itLocale, jaLocale, koLocale, ltLocale, mnLocale, nbLocale, nlBeLocale,
nlLocale, plLocale, ptBrLocale, ruLocale, roLocale, skLocale, slLocale, svLocale, thLocale, trLocale, zhCnLocale
];
locales.forEach((locale: LocaleData) => defineLocale(locale.abbr, locale));

Expand Down
118 changes: 118 additions & 0 deletions src/chronos/i18n/lt.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
// tslint:disable:comment-format binary-expression-operand-order max-line-length
// tslint:disable:no-bitwise prefer-template cyclomatic-complexity
// tslint:disable:no-shadowed-variable switch-default prefer-const
// tslint:disable:one-variable-per-declaration newline-before-return

import { LocaleData } from '../locale/locale.class';
import { getMonth } from '../utils/date-getters';
import { getDayOfWeek } from '../units/day-of-week';

//! moment.js locale configuration
//! locale : Lithuanian [lt]
//! author : Stanislavas Guk : https://github.com/ixoster

const units = {
ss : 'sekundė_sekundžių_sekundes',
m : 'minutė_minutės_minutę',
mm: 'minutės_minučių_minutes',
h : 'valanda_valandos_valandą',
hh: 'valandos_valandų_valandas',
d : 'diena_dienos_dieną',
dd: 'dienos_dienų_dienas',
M : 'mėnuo_mėnesio_mėnesį',
MM: 'mėnesiai_mėnesių_mėnesius',
y : 'metai_metų_metus',
yy: 'metai_metų_metus'
};
function translateSeconds(num: number, withoutSuffix: boolean, key: string, isFuture: boolean) {
if (withoutSuffix) {
return 'kelios sekundės';
} else {
return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
}
}
function translateSingular(num: number, withoutSuffix: boolean, key: string, isFuture: boolean) {
return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);
}
function special(num: number) {
return num % 10 === 0 || (num > 10 && num < 20);
}
function forms(key: string) {
return units[key].split('_');
}
function translate(num: number, withoutSuffix: boolean, key: string, isFuture: boolean) {
let result = num + ' ';
if (num === 1) {
return result + translateSingular(num, withoutSuffix, key[0], isFuture);
} else if (withoutSuffix) {
return result + (special(num) ? forms(key)[1] : forms(key)[0]);
} else {
if (isFuture) {
return result + forms(key)[1];
} else {
return result + (special(num) ? forms(key)[1] : forms(key)[2]);
}
}
}

export const ltLocale: LocaleData = {
abbr: 'lt',
months : {
format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),
isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/
},
monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
weekdays : {
format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),
standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),
isFormat: /dddd HH:mm/
},
weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),
weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
LTS : 'HH:mm:ss',
L : 'YYYY-MM-DD',
LL : 'YYYY [m.] MMMM D [d.]',
LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
l : 'YYYY-MM-DD',
ll : 'YYYY [m.] MMMM D [d.]',
lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'
},
calendar : {
sameDay : '[Šiandien] LT',
nextDay : '[Rytoj] LT',
nextWeek : 'dddd LT',
lastDay : '[Vakar] LT',
lastWeek : '[Praėjusį] dddd LT',
sameElse : 'L'
},
relativeTime : {
future : 'po %s',
past : 'prieš %s',
s : translateSeconds,
ss : translate,
m : translateSingular,
mm : translate,
h : translateSingular,
hh : translate,
d : translateSingular,
dd : translate,
M : translateSingular,
MM : translate,
y : translateSingular,
yy : translate
},
dayOfMonthOrdinalParse: /\d{1,2}-oji/,
ordinal(num) {
return num + '-oji';
},
week : {
dow : 1, // Monday is the first day of the week.
doy : 4 // The week that contains Jan 4th is the first week of the year.
}
};
1 change: 1 addition & 0 deletions src/chronos/public_api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ export { idLocale } from './i18n/id';
export { itLocale } from './i18n/it';
export { jaLocale } from './i18n/ja';
export { koLocale } from './i18n/ko';
export { ltLocale } from './i18n/lt';
export { mnLocale } from './i18n/mn';
export { nbLocale } from './i18n/nb';
export { nlLocale } from './i18n/nl';
Expand Down
238 changes: 238 additions & 0 deletions src/chronos/test/locale/lt.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,238 @@
// tslint:disable:max-line-length max-file-line-count prefer-const forin prefer-template one-variable-per-declaration newline-before-return
// tslint:disable:binary-expression-operand-order comment-format one-line no-var-keyword object-literal-shorthand
// tslint:disable:variable-name no-shadowed-variable

import { assertEq, assertDeepEq } from '../test-helpers';
import { moment } from '../chain';
import { ltLocale } from '../../i18n/lt';

// localeModule('en');
describe('locale: lt', () => {
beforeAll(() => {
moment.locale('lt', ltLocale);
});

afterAll(() => {
moment.locale('en');
});

// localeModule('lt');

it('parse', function () {
var _tests = 'sausis sau_vasaris vas_kovas kov_balandis bal_gegužė geg_birželis bir_liepa lie_rugpjūtis rgp_rugsėjis rgs_spalis spa_lapkritis lap_gruodis grd'.split('_'), i;
function equalTest(input, mmm, i) {
assertEq(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
}

let tests: string[][] = [];
for (i = 0; i < 12; i++) {
tests[i] = _tests[i].split(' ');
equalTest(tests[i][0], 'MMM', i);
equalTest(tests[i][1], 'MMM', i);
equalTest(tests[i][0], 'MMMM', i);
equalTest(tests[i][1], 'MMMM', i);
equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
}
});

it('format', function () {
var a = [
['dddd, Do MMMM YYYY, h:mm:ss a', 'sekmadienis, 14-oji vasario 2010, 3:25:50 pm'],
['ddd, hA', 'Sek, 3PM'],
['M Mo MM MMMM MMM', '2 2-oji 02 vasaris vas'],
['YYYY YY', '2010 10'],
['D Do DD', '14 14-oji 14'],
['d do dddd ddd dd', '0 0-oji sekmadienis Sek S'],
['DDD DDDo DDDD', '45 45-oji 045'],
['w wo ww', '6 6-oji 06'],
['h hh', '3 03'],
['H HH', '15 15'],
['m mm', '25 25'],
['s ss', '50 50'],
['a A', 'pm PM'],
['DDDo [metų diena]', '45-oji metų diena'],
['LTS', '15:25:50'],
['L', '2010-02-14'],
['LL', '2010 m. vasario 14 d.'],
['LLL', '2010 m. vasario 14 d., 15:25 val.'],
['LLLL', '2010 m. vasario 14 d., sekmadienis, 15:25 val.'],
['l', '2010-02-14'],
['ll', '2010 m. vasario 14 d.'],
['lll', '2010 m. vasario 14 d., 15:25 val.'],
['llll', '2010 m. vasario 14 d., Sek, 15:25 val.']
],
b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
i;
for (i = 0; i < a.length; i++) {
assertEq(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
}
});

it('format ordinal', function () {
assertEq(moment([2011, 0, 1]).format('DDDo'), '1-oji', '1-oji');
assertEq(moment([2011, 0, 2]).format('DDDo'), '2-oji', '2-oji');
assertEq(moment([2011, 0, 3]).format('DDDo'), '3-oji', '3-oji');
assertEq(moment([2011, 0, 4]).format('DDDo'), '4-oji', '4-oji');
assertEq(moment([2011, 0, 5]).format('DDDo'), '5-oji', '5-oji');
assertEq(moment([2011, 0, 6]).format('DDDo'), '6-oji', '6-oji');
assertEq(moment([2011, 0, 7]).format('DDDo'), '7-oji', '7-oji');
assertEq(moment([2011, 0, 8]).format('DDDo'), '8-oji', '8-oji');
assertEq(moment([2011, 0, 9]).format('DDDo'), '9-oji', '9-oji');
assertEq(moment([2011, 0, 10]).format('DDDo'), '10-oji', '10-oji');

assertEq(moment([2011, 0, 11]).format('DDDo'), '11-oji', '11-oji');
assertEq(moment([2011, 0, 12]).format('DDDo'), '12-oji', '12-oji');
assertEq(moment([2011, 0, 13]).format('DDDo'), '13-oji', '13-oji');
assertEq(moment([2011, 0, 14]).format('DDDo'), '14-oji', '14-oji');
assertEq(moment([2011, 0, 15]).format('DDDo'), '15-oji', '15-oji');
assertEq(moment([2011, 0, 16]).format('DDDo'), '16-oji', '16-oji');
assertEq(moment([2011, 0, 17]).format('DDDo'), '17-oji', '17-oji');
assertEq(moment([2011, 0, 18]).format('DDDo'), '18-oji', '18-oji');
assertEq(moment([2011, 0, 19]).format('DDDo'), '19-oji', '19-oji');
assertEq(moment([2011, 0, 20]).format('DDDo'), '20-oji', '20-oji');

assertEq(moment([2011, 0, 21]).format('DDDo'), '21-oji', '21-oji');
assertEq(moment([2011, 0, 22]).format('DDDo'), '22-oji', '22-oji');
assertEq(moment([2011, 0, 23]).format('DDDo'), '23-oji', '23-oji');
assertEq(moment([2011, 0, 24]).format('DDDo'), '24-oji', '24-oji');
assertEq(moment([2011, 0, 25]).format('DDDo'), '25-oji', '25-oji');
assertEq(moment([2011, 0, 26]).format('DDDo'), '26-oji', '26-oji');
assertEq(moment([2011, 0, 27]).format('DDDo'), '27-oji', '27-oji');
assertEq(moment([2011, 0, 28]).format('DDDo'), '28-oji', '28-oji');
assertEq(moment([2011, 0, 29]).format('DDDo'), '29-oji', '29-oji');
assertEq(moment([2011, 0, 30]).format('DDDo'), '30-oji', '30-oji');

assertEq(moment([2011, 0, 31]).format('DDDo'), '31-oji', '31-oji');
});

it('format month', function () {
var expected = 'sausis sau_vasaris vas_kovas kov_balandis bal_gegužė geg_birželis bir_liepa lie_rugpjūtis rgp_rugsėjis rgs_spalis spa_lapkritis lap_gruodis grd'.split('_'), i;
for (i = 0; i < expected.length; i++) {
assertEq(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
}
});

it('format week', function () {
var expected = 'sekmadienis Sek S_pirmadienis Pir P_antradienis Ant A_trečiadienis Tre T_ketvirtadienis Ket K_penktadienis Pen Pn_šeštadienis Šeš Š'.split('_'), i;
for (i = 0; i < expected.length; i++) {
assertEq(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
}
});

it('from', function () {
var start = moment([2007, 1, 28]);
assertEq(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'kelios sekundės', '44 seconds = seconds');
assertEq(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minutė', '45 seconds = a minute');
assertEq(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minutė', '89 seconds = a minute');
assertEq(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutės', '90 seconds = 2 minutes');
assertEq(start.from(moment([2007, 1, 28]).add({m: 10}), true), '10 minučių', '10 minutes = 10 minutes');
assertEq(start.from(moment([2007, 1, 28]).add({m: 11}), true), '11 minučių', '11 minutes = 11 minutes');
assertEq(start.from(moment([2007, 1, 28]).add({m: 19}), true), '19 minučių', '19 minutes = 19 minutes');
assertEq(start.from(moment([2007, 1, 28]).add({m: 20}), true), '20 minučių', '20 minutes = 20 minutes');
assertEq(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutės', '44 minutes = 44 minutes');
assertEq(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'valanda', '45 minutes = an hour');
assertEq(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'valanda', '89 minutes = an hour');
assertEq(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 valandos', '90 minutes = 2 hours');
assertEq(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 valandos', '5 hours = 5 hours');
assertEq(start.from(moment([2007, 1, 28]).add({h: 10}), true), '10 valandų', '10 hours = 10 hours');
assertEq(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 valandos', '21 hours = 21 hours');
assertEq(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'diena', '22 hours = a day');
assertEq(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'diena', '35 hours = a day');
assertEq(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dienos', '36 hours = 2 days');
assertEq(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'diena', '1 day = a day');
assertEq(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dienos', '5 days = 5 days');
assertEq(start.from(moment([2007, 1, 28]).add({d: 10}), true), '10 dienų', '10 days = 10 days');
assertEq(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dienos', '25 days = 25 days');
assertEq(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mėnuo', '26 days = a month');
assertEq(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mėnuo', '30 days = a month');
assertEq(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mėnuo', '43 days = a month');
assertEq(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mėnesiai', '46 days = 2 months');
assertEq(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mėnesiai', '75 days = 2 months');
assertEq(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mėnesiai', '76 days = 3 months');
assertEq(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mėnuo', '1 month = a month');
assertEq(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mėnesiai', '5 months = 5 months');
assertEq(start.from(moment([2007, 1, 28]).add({M: 10}), true), '10 mėnesių', '10 months = 10 months');
assertEq(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'metai', '345 days = a year');
assertEq(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 metai', '548 days = 2 years');
assertEq(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'metai', '1 year = a year');
assertEq(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 metai', '5 years = 5 years');
});

it('suffix', function () {
assertEq(moment(30000).from(0), 'po kelių sekundžių', 'prefix');
assertEq(moment(0).from(30000), 'prieš kelias sekundes', 'suffix');
});

it('now from now', function () {
assertEq(moment().fromNow(), 'prieš kelias sekundes', 'now from now should display as in the past');
});

it('fromNow', function () {
assertEq(moment().add({s: 30}).fromNow(), 'po kelių sekundžių', 'in seconds');
assertEq(moment().add({d: 5}).fromNow(), 'po 5 dienų', 'in 5 days');
});

it('calendar day', function () {
var a = moment().hours(12).minutes(0).seconds(0);

assertEq(moment(a).calendar(), 'Šiandien 12:00', 'today at the same time');
assertEq(moment(a).add({m: 25}).calendar(), 'Šiandien 12:25', 'Now plus 25 min');
assertEq(moment(a).add({h: 1}).calendar(), 'Šiandien 13:00', 'Now plus 1 hour');
assertEq(moment(a).add({d: 1}).calendar(), 'Rytoj 12:00', 'tomorrow at the same time');
assertEq(moment(a).subtract({h: 1}).calendar(), 'Šiandien 11:00', 'Now minus 1 hour');
assertEq(moment(a).subtract({d: 1}).calendar(), 'Vakar 12:00', 'yesterday at the same time');
});

it('calendar next week', function () {
var i, m;
for (i = 2; i < 7; i++) {
m = moment().add({d: i});
assertEq(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days current time');
m.hours(0).minutes(0).seconds(0).milliseconds(0);
assertEq(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days beginning of day');
m.hours(23).minutes(59).seconds(59).milliseconds(999);
assertEq(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days end of day');
}
});

it('calendar last week', function () {
var i, m;
for (i = 2; i < 7; i++) {
m = moment().subtract({d: i});
assertEq(m.calendar(), m.format('[Praėjusį] dddd LT'), 'Today - ' + i + ' days current time');
m.hours(0).minutes(0).seconds(0).milliseconds(0);
assertEq(m.calendar(), m.format('[Praėjusį] dddd LT'), 'Today - ' + i + ' days beginning of day');
m.hours(23).minutes(59).seconds(59).milliseconds(999);
assertEq(m.calendar(), m.format('[Praėjusį] dddd LT'), 'Today - ' + i + ' days end of day');
}
});

it('calendar all else', function () {
var weeksAgo = moment().subtract({w: 1}),
weeksFromNow = moment().add({w: 1});

assertEq(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
assertEq(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');

weeksAgo = moment().subtract({w: 2});
weeksFromNow = moment().add({w: 2});

assertEq(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
assertEq(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
});

it('weeks year starting monday formatted', function () {
assertEq(moment([2012, 0, 1]).format('w ww wo'), '52 52 52-oji', 'Jan 1 2012 should be week 52');
assertEq(moment([2012, 0, 2]).format('w ww wo'), '1 01 1-oji', 'Jan 2 2012 should be week 1');
assertEq(moment([2012, 0, 8]).format('w ww wo'), '1 01 1-oji', 'Jan 8 2012 should be week 1');
assertEq(moment([2012, 0, 9]).format('w ww wo'), '2 02 2-oji', 'Jan 9 2012 should be week 2');
assertEq(moment([2012, 0, 15]).format('w ww wo'), '2 02 2-oji', 'Jan 15 2012 should be week 2');
});

it('weeks year starting monday formatted', function () {
assertEq(moment([2015, 4, 1]).format('LL'), '2015 m. gegužės 1 d.', 'uses format instead of standalone form');
});
});
Loading

0 comments on commit 87e3751

Please sign in to comment.