Release note for Id83eda95
[mediawiki.git] / resources / lib / moment / locale / lb.js
blob2e84dab3cfc1fa992eec96f45ba0ef78246869d4
1 // moment.js locale configuration
2 // locale : Luxembourgish (lb)
3 // author : mweimerskirch : https://github.com/mweimerskirch, David Raison : https://github.com/kwisatz
5 // Note: Luxembourgish has a very particular phonological rule ('Eifeler Regel') that causes the
6 // deletion of the final 'n' in certain contexts. That's what the 'eifelerRegelAppliesToWeekday'
7 // and 'eifelerRegelAppliesToNumber' methods are meant for
9 (function (factory) {
10     if (typeof define === 'function' && define.amd) {
11         define(['moment'], factory); // AMD
12     } else if (typeof exports === 'object') {
13         module.exports = factory(require('../moment')); // Node
14     } else {
15         factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
16     }
17 }(function (moment) {
18     function processRelativeTime(number, withoutSuffix, key, isFuture) {
19         var format = {
20             'm': ['eng Minutt', 'enger Minutt'],
21             'h': ['eng Stonn', 'enger Stonn'],
22             'd': ['een Dag', 'engem Dag'],
23             'M': ['ee Mount', 'engem Mount'],
24             'y': ['ee Joer', 'engem Joer']
25         };
26         return withoutSuffix ? format[key][0] : format[key][1];
27     }
29     function processFutureTime(string) {
30         var number = string.substr(0, string.indexOf(' '));
31         if (eifelerRegelAppliesToNumber(number)) {
32             return 'a ' + string;
33         }
34         return 'an ' + string;
35     }
37     function processPastTime(string) {
38         var number = string.substr(0, string.indexOf(' '));
39         if (eifelerRegelAppliesToNumber(number)) {
40             return 'viru ' + string;
41         }
42         return 'virun ' + string;
43     }
45     /**
46      * Returns true if the word before the given number loses the '-n' ending.
47      * e.g. 'an 10 Deeg' but 'a 5 Deeg'
48      *
49      * @param number {integer}
50      * @returns {boolean}
51      */
52     function eifelerRegelAppliesToNumber(number) {
53         number = parseInt(number, 10);
54         if (isNaN(number)) {
55             return false;
56         }
57         if (number < 0) {
58             // Negative Number --> always true
59             return true;
60         } else if (number < 10) {
61             // Only 1 digit
62             if (4 <= number && number <= 7) {
63                 return true;
64             }
65             return false;
66         } else if (number < 100) {
67             // 2 digits
68             var lastDigit = number % 10, firstDigit = number / 10;
69             if (lastDigit === 0) {
70                 return eifelerRegelAppliesToNumber(firstDigit);
71             }
72             return eifelerRegelAppliesToNumber(lastDigit);
73         } else if (number < 10000) {
74             // 3 or 4 digits --> recursively check first digit
75             while (number >= 10) {
76                 number = number / 10;
77             }
78             return eifelerRegelAppliesToNumber(number);
79         } else {
80             // Anything larger than 4 digits: recursively check first n-3 digits
81             number = number / 1000;
82             return eifelerRegelAppliesToNumber(number);
83         }
84     }
86     return moment.defineLocale('lb', {
87         months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
88         monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
89         weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
90         weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
91         weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
92         longDateFormat: {
93             LT: 'H:mm [Auer]',
94             LTS: 'H:mm:ss [Auer]',
95             L: 'DD.MM.YYYY',
96             LL: 'D. MMMM YYYY',
97             LLL: 'D. MMMM YYYY LT',
98             LLLL: 'dddd, D. MMMM YYYY LT'
99         },
100         calendar: {
101             sameDay: '[Haut um] LT',
102             sameElse: 'L',
103             nextDay: '[Muer um] LT',
104             nextWeek: 'dddd [um] LT',
105             lastDay: '[Gëschter um] LT',
106             lastWeek: function () {
107                 // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
108                 switch (this.day()) {
109                     case 2:
110                     case 4:
111                         return '[Leschten] dddd [um] LT';
112                     default:
113                         return '[Leschte] dddd [um] LT';
114                 }
115             }
116         },
117         relativeTime : {
118             future : processFutureTime,
119             past : processPastTime,
120             s : 'e puer Sekonnen',
121             m : processRelativeTime,
122             mm : '%d Minutten',
123             h : processRelativeTime,
124             hh : '%d Stonnen',
125             d : processRelativeTime,
126             dd : '%d Deeg',
127             M : processRelativeTime,
128             MM : '%d Méint',
129             y : processRelativeTime,
130             yy : '%d Joer'
131         },
132         ordinalParse: /\d{1,2}\./,
133         ordinal: '%d.',
134         week: {
135             dow: 1, // Monday is the first day of the week.
136             doy: 4  // The week that contains Jan 4th is the first week of the year.
137         }
138     });
139 }));