|
| 1 | +// moment.js language configuration |
| 2 | +// language : Luxembourgish (lb) |
| 3 | +// author : mweimerskirch : https://github.com/mweimerskirch |
| 4 | + |
| 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 |
| 8 | + |
| 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(window.moment); // Browser 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 | + 'dd': [number + ' Deeg', number + ' Deeg'], |
| 24 | + 'M': ['ee Mount', 'engem Mount'], |
| 25 | + 'MM': [number + ' Méint', number + ' Méint'], |
| 26 | + 'y': ['ee Joer', 'engem Joer'], |
| 27 | + 'yy': [number + ' Joer', number + ' Joer'] |
| 28 | + }; |
| 29 | + return withoutSuffix ? format[key][0] : format[key][1]; |
| 30 | + } |
| 31 | + |
| 32 | + function processFutureTime(string) { |
| 33 | + var number = string.substr(0, string.indexOf(' ')); |
| 34 | + if (eifelerRegelAppliesToNumber(number)) { |
| 35 | + return "a " + string; |
| 36 | + } |
| 37 | + return "an " + string; |
| 38 | + } |
| 39 | + |
| 40 | + function processPastTime(string) { |
| 41 | + var number = string.substr(0, string.indexOf(' ')); |
| 42 | + if (eifelerRegelAppliesToNumber(number)) { |
| 43 | + return "viru " + string; |
| 44 | + } |
| 45 | + return "virun " + string; |
| 46 | + } |
| 47 | + |
| 48 | + function processLastWeek(string1) { |
| 49 | + var weekday = this.format('d'); |
| 50 | + if (eifelerRegelAppliesToWeekday(weekday)) { |
| 51 | + return '[Leschte] dddd [um] LT'; |
| 52 | + } |
| 53 | + return '[Leschten] dddd [um] LT'; |
| 54 | + } |
| 55 | + |
| 56 | + /** |
| 57 | + * Returns true if the word before the given week day loses the "-n" ending. |
| 58 | + * e.g. "Leschten Dënschdeg" but "Leschte Méindeg" |
| 59 | + * |
| 60 | + * @param weekday {integer} |
| 61 | + * @returns {boolean} |
| 62 | + */ |
| 63 | + function eifelerRegelAppliesToWeekday(weekday) { |
| 64 | + weekday = parseInt(weekday, 10); |
| 65 | + switch (weekday) { |
| 66 | + case 0: // Sonndeg |
| 67 | + case 1: // Méindeg |
| 68 | + case 3: // Mëttwoch |
| 69 | + case 5: // Freideg |
| 70 | + case 6: // Samschdeg |
| 71 | + return true; |
| 72 | + default: // 2 Dënschdeg, 4 Donneschdeg |
| 73 | + return false; |
| 74 | + } |
| 75 | + } |
| 76 | + |
| 77 | + /** |
| 78 | + * Returns true if the word before the given number loses the "-n" ending. |
| 79 | + * e.g. "an 10 Deeg" but "a 5 Deeg" |
| 80 | + * |
| 81 | + * @param number {integer} |
| 82 | + * @returns {boolean} |
| 83 | + */ |
| 84 | + function eifelerRegelAppliesToNumber(number) { |
| 85 | + number = parseInt(number, 10); |
| 86 | + if (isNaN(number)) { |
| 87 | + return false; |
| 88 | + } |
| 89 | + if (number < 0) { |
| 90 | + // Negative Number --> always true |
| 91 | + return true; |
| 92 | + } else if (number < 10) { |
| 93 | + // Only 1 digit |
| 94 | + if (4 <= number && number <= 7) { |
| 95 | + return true; |
| 96 | + } |
| 97 | + return false; |
| 98 | + } else if (number < 100) { |
| 99 | + // 2 digits |
| 100 | + var lastDigit = number % 10, firstDigit = number / 10; |
| 101 | + if (lastDigit === 0) { |
| 102 | + return eifelerRegelAppliesToNumber(firstDigit); |
| 103 | + } |
| 104 | + return eifelerRegelAppliesToNumber(lastDigit); |
| 105 | + } else if (number < 10000) { |
| 106 | + // 3 or 4 digits --> recursively check first digit |
| 107 | + while (number >= 10) { |
| 108 | + number = number / 10; |
| 109 | + } |
| 110 | + return eifelerRegelAppliesToNumber(number); |
| 111 | + } else { |
| 112 | + // Anything larger than 4 digits: recursively check first n-3 digits |
| 113 | + number = number / 1000; |
| 114 | + return eifelerRegelAppliesToNumber(number); |
| 115 | + } |
| 116 | + } |
| 117 | + |
| 118 | + return moment.lang('lb', { |
| 119 | + months: "Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"), |
| 120 | + monthsShort: "Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"), |
| 121 | + weekdays: "Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"), |
| 122 | + weekdaysShort: "So._Mé._Dë._Më._Do._Fr._Sa.".split("_"), |
| 123 | + weekdaysMin: "So_Mé_Dë_Më_Do_Fr_Sa".split("_"), |
| 124 | + longDateFormat: { |
| 125 | + LT: "H:mm [Auer]", |
| 126 | + L: "DD.MM.YYYY", |
| 127 | + LL: "D. MMMM YYYY", |
| 128 | + LLL: "D. MMMM YYYY LT", |
| 129 | + LLLL: "dddd, D. MMMM YYYY LT" |
| 130 | + }, |
| 131 | + calendar: { |
| 132 | + sameDay: "[Haut um] LT", |
| 133 | + sameElse: "L", |
| 134 | + nextDay: '[Muer um] LT', |
| 135 | + nextWeek: 'dddd [um] LT', |
| 136 | + lastDay: '[Gëschter um] LT', |
| 137 | + lastWeek: processLastWeek |
| 138 | + }, |
| 139 | + relativeTime: { |
| 140 | + future: processFutureTime, |
| 141 | + past: processPastTime, |
| 142 | + s: "e puer Sekonnen", |
| 143 | + m: processRelativeTime, |
| 144 | + mm: "%d Minutten", |
| 145 | + h: processRelativeTime, |
| 146 | + hh: "%d Stonnen", |
| 147 | + d: processRelativeTime, |
| 148 | + dd: processRelativeTime, |
| 149 | + M: processRelativeTime, |
| 150 | + MM: processRelativeTime, |
| 151 | + y: processRelativeTime, |
| 152 | + yy: processRelativeTime |
| 153 | + }, |
| 154 | + ordinal: '%d.', |
| 155 | + week: { |
| 156 | + dow: 1, // Monday is the first day of the week. |
| 157 | + doy: 4 // The week that contains Jan 4th is the first week of the year. |
| 158 | + } |
| 159 | + }); |
| 160 | +})); |
0 commit comments