]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
Better support for accusative/nominative months and long weekdays
authorIskren Chernev <iskren.chernev@gmail.com>
Mon, 9 Nov 2015 09:52:35 +0000 (01:52 -0800)
committerIskren Chernev <iskren.chernev@gmail.com>
Wed, 9 Dec 2015 06:52:09 +0000 (22:52 -0800)
src/lib/units/day-of-week.js
src/lib/units/month.js
src/locale/be.js
src/locale/hy-am.js
src/locale/ka.js
src/locale/lt.js
src/locale/ru.js
src/locale/uk.js
src/test/locale/hr.js
src/test/locale/ka.js

index d736a33ae341c32ce20f27ebd0ae532bf18265ce..2f0460a1f88ebbe80654020cb88e5c662cfd9b37 100644 (file)
@@ -3,6 +3,7 @@ import { addUnitAlias } from './aliases';
 import { addRegexToken, match1to2, matchWord } from '../parse/regex';
 import { addWeekParseToken } from '../parse/token';
 import toInt from '../utils/to-int';
+import isArray from '../utils/is-array';
 import { createLocal } from '../create/local';
 import getParsingFlags from '../create/parsing-flags';
 
@@ -76,8 +77,9 @@ function parseWeekday(input, locale) {
 // LOCALES
 
 export var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
-export function localeWeekdays (m) {
-    return this._weekdays[m.day()];
+export function localeWeekdays (m, format) {
+    return isArray(this._weekdays) ? this._weekdays[m.day()] :
+        this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];
 }
 
 export var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
index 39193e700c5384e794eaca65653f8c3c38f5a855..18e42cff834c8e1f4abd1939279d3977b0569734 100644 (file)
@@ -6,6 +6,7 @@ import { addParseToken } from '../parse/token';
 import { hooks } from '../utils/hooks';
 import { MONTH } from './constants';
 import toInt from '../utils/to-int';
+import isArray from '../utils/is-array';
 import { createUTC } from '../create/utc';
 import getParsingFlags from '../create/parsing-flags';
 
@@ -54,14 +55,17 @@ addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
 
 // LOCALES
 
+var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/;
 export var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
-export function localeMonths (m) {
-    return this._months[m.month()];
+export function localeMonths (m, format) {
+    return isArray(this._months) ? this._months[m.month()] :
+        this._months[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
 }
 
 export var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
-export function localeMonthsShort (m) {
-    return this._monthsShort[m.month()];
+export function localeMonthsShort (m, format) {
+    return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
+        this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
 }
 
 export function localeMonthsParse (monthName, format, strict) {
index 54e7e4a0f5c7f3a907e01c4c6f9bd5a9c5dc5c1b..cfdd99f17ae01e69728b4e736693d9a7df76d811 100644 (file)
@@ -28,31 +28,18 @@ function relativeTimeWithPlural(number, withoutSuffix, key) {
         return number + ' ' + plural(format[key], +number);
     }
 }
-function monthsCaseReplace(m, format) {
-    var months = {
-        'nominative': 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'),
-        'accusative': 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_')
-    },
-    nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
-        'accusative' :
-        'nominative';
-    return months[nounCase][m.month()];
-}
-function weekdaysCaseReplace(m, format) {
-    var weekdays = {
-        'nominative': 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
-        'accusative': 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_')
-    },
-    nounCase = (/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/).test(format) ?
-        'accusative' :
-        'nominative';
-    return weekdays[nounCase][m.day()];
-}
 
 export default moment.defineLocale('be', {
-    months : monthsCaseReplace,
+    months : {
+        format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),
+        standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')
+    },
     monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
-    weekdays : weekdaysCaseReplace,
+    weekdays : {
+        format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),
+        standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
+        isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/
+    },
     weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
     weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
     longDateFormat : {
index dd78e6a010cb9a5b965404e15403a51ccdcf6354..7b5cc2bcb317b8851447ad78cbe7a7664f153b46 100644 (file)
@@ -4,29 +4,13 @@
 
 import moment from '../moment';
 
-function monthsCaseReplace(m, format) {
-    var months = {
-        'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'),
-        'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_')
-    },
-    nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
-        'accusative' :
-        'nominative';
-    return months[nounCase][m.month()];
-}
-function monthsShortCaseReplace(m, format) {
-    var monthsShort = 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_');
-    return monthsShort[m.month()];
-}
-function weekdaysCaseReplace(m, format) {
-    var weekdays = 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_');
-    return weekdays[m.day()];
-}
-
 export default moment.defineLocale('hy-am', {
-    months : monthsCaseReplace,
-    monthsShort : monthsShortCaseReplace,
-    weekdays : weekdaysCaseReplace,
+    months : {
+        format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),
+        standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')
+    },
+    monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
+    weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),
     weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
     weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
     longDateFormat : {
index b1454b808e97df68df07cbd067257b2be3f41cd6..a540f30a6d1b57912df91f17f42115b8f4de00a5 100644 (file)
@@ -4,31 +4,17 @@
 
 import moment from '../moment';
 
-function monthsCaseReplace(m, format) {
-    var months = {
-        'nominative': 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
-        'accusative': 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
-    },
-    nounCase = (/D[oD] *MMMM?/).test(format) ?
-        'accusative' :
-        'nominative';
-    return months[nounCase][m.month()];
-}
-function weekdaysCaseReplace(m, format) {
-    var weekdays = {
-        'nominative': 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
-        'accusative': 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_')
-    },
-    nounCase = (/(წინა|შემდეგ)/).test(format) ?
-        'accusative' :
-        'nominative';
-    return weekdays[nounCase][m.day()];
-}
-
 export default moment.defineLocale('ka', {
-    months : monthsCaseReplace,
+    months : {
+        standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
+        format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
+    },
     monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
-    weekdays : weekdaysCaseReplace,
+    weekdays : {
+        standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
+        format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),
+        isFormat: /(წინა|შემდეგ)/
+    },
     weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
     weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
     longDateFormat : {
index 6487c68371550ded620a24e6165936d09551fca5..81e7e81f140a5fb1ca6624d389b0f3591f66ff3f 100644 (file)
@@ -15,8 +15,7 @@ var units = {
     'MM': 'mėnesiai_mėnesių_mėnesius',
     'y' : 'metai_metų_metus',
     'yy': 'metai_metų_metus'
-},
-weekDays = 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_');
+};
 function translateSeconds(number, withoutSuffix, key, isFuture) {
     if (withoutSuffix) {
         return 'kelios sekundės';
@@ -24,16 +23,6 @@ function translateSeconds(number, withoutSuffix, key, isFuture) {
         return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
     }
 }
-function monthsCaseReplace(m, format) {
-    var months = {
-            'nominative': 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),
-            'accusative': 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_')
-        },
-        nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
-            'accusative' :
-            'nominative';
-    return months[nounCase][m.month()];
-}
 function translateSingular(number, withoutSuffix, key, isFuture) {
     return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);
 }
@@ -57,16 +46,17 @@ function translate(number, withoutSuffix, key, isFuture) {
         }
     }
 }
-function relativeWeekDay(moment, format) {
-    var nominative = format.indexOf('dddd HH:mm') === -1,
-        weekDay = weekDays[moment.day()];
-    return nominative ? weekDay : weekDay.substring(0, weekDay.length - 2) + 'į';
-}
-
 export default moment.defineLocale('lt', {
-    months : monthsCaseReplace,
+    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('_')
+    },
     monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
-    weekdays : relativeWeekDay,
+    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('_'),
     longDateFormat : {
index 0ea3c239f234b612f0be16a9cf11fbbcf5087303..e9f063583d70e34a86fe1f2e900fa48d3838e0ca 100644 (file)
@@ -24,43 +24,22 @@ function relativeTimeWithPlural(number, withoutSuffix, key) {
         return number + ' ' + plural(format[key], +number);
     }
 }
-function monthsCaseReplace(m, format) {
-    var months = {
-        'nominative': 'Январь_Февраль_Март_Апрель_Май_Июнь_Июль_Август_Сентябрь_Октябрь_Ноябрь_Декабрь'.split('_'),
-        'accusative': 'Января_Февраля_Марта_Апреля_Мая_Июня_Июля_Августа_Сентября_Октября_Ноября_Декабря'.split('_')
-    },
-    nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
-        'accusative' :
-        'nominative';
-    return months[nounCase][m.month()];
-}
-function monthsShortCaseReplace(m, format) {
-    var monthsShort = {
-        'nominative': 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
-        'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_')
-    },
-    nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
-        'accusative' :
-        'nominative';
-    return monthsShort[nounCase][m.month()];
-}
-function weekdaysCaseReplace(m, format) {
-    var weekdays = {
-        'nominative': 'Воскресенье_Понедельник_Вторник_Среда_Четверг_Пятница_Суббота'.split('_'),
-        'accusative': 'Воскресенье_Понедельник_Вторник_Среду_Четверг_Пятницу_Субботу'.split('_')
-    },
-    nounCase = (/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/).test(format) ?
-        'accusative' :
-        'nominative';
-    return weekdays[nounCase][m.day()];
-}
-
 var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[й|я]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];
 
 export default moment.defineLocale('ru', {
-    months : monthsCaseReplace,
-    monthsShort : monthsShortCaseReplace,
-    weekdays : weekdaysCaseReplace,
+    months : {
+        format: 'Января_Февраля_Марта_Апреля_Мая_Июня_Июля_Августа_Сентября_Октября_Ноября_Декабря'.split('_'),
+        standalone: 'Январь_Февраль_Март_Апрель_Май_Июнь_Июль_Август_Сентябрь_Октябрь_Ноябрь_Декабрь'.split('_')
+    },
+    monthsShort : {
+        format: 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_'),
+        standalone: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_')
+    },
+    weekdays : {
+        standalone: 'Воскресенье_Понедельник_Вторник_Среда_Четверг_Пятница_Суббота'.split('_'),
+        format: 'Воскресенье_Понедельник_Вторник_Среду_Четверг_Пятницу_Субботу'.split('_'),
+        isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/
+    },
     weekdaysShort : 'Вс_Пн_Вт_Ср_Чт_Пт_Сб'.split('_'),
     weekdaysMin : 'Вс_Пн_Вт_Ср_Чт_Пт_Сб'.split('_'),
     monthsParse : monthsParse,
index 9894dd349ba31f735339675134bc7c129016306a..6cbffaa641a497e0727ee0f2750ed28ae9576d39 100644 (file)
@@ -27,16 +27,6 @@ function relativeTimeWithPlural(number, withoutSuffix, key) {
         return number + ' ' + plural(format[key], +number);
     }
 }
-function monthsCaseReplace(m, format) {
-    var months = {
-        'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'),
-        'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_')
-    },
-    nounCase = (/D[oD]? *MMMM?/).test(format) ?
-        'accusative' :
-        'nominative';
-    return months[nounCase][m.month()];
-}
 function weekdaysCaseReplace(m, format) {
     var weekdays = {
         'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
@@ -57,7 +47,10 @@ function processHoursFunction(str) {
 }
 
 export default moment.defineLocale('uk', {
-    months : monthsCaseReplace,
+    months : {
+        'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),
+        'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')
+    },
     monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),
     weekdays : weekdaysCaseReplace,
     weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
index 9ecd79b8213c1ff732c3d7dcdc1063ff29e9131c..cbc91f4ee808d183f2c9ca3d0610d5092552814e 100644 (file)
@@ -22,7 +22,7 @@ test('parse', function (assert) {
 
 test('format', function (assert) {
     var a = [
-            ['dddd, Do MMMM YYYY, h:mm:ss a',      'nedjelja, 14. veljača 2010, 3:25:50 pm'],
+            ['dddd, Do MMMM YYYY, h:mm:ss a',      'nedjelja, 14. veljače 2010, 3:25:50 pm'],
             ['ddd, hA',                            'ned., 3PM'],
             ['M Mo MM MMMM MMM',                   '2 2. 02 veljača velj.'],
             ['YYYY YY',                            '2010 10'],
index 722ce289040a4c8791828ceff8ee554aa6d0a8f6..878602164c8d9ee0f5e21530cc13918afff30ff5 100644 (file)
@@ -41,9 +41,9 @@ test('format', function (assert) {
             ['წლის DDDo დღე',                 'წლის 45-ე დღე'],
             ['LTS',                           '3:25:50 PM'],
             ['L',                             '14/02/2010'],
-            ['LL',                            '14 á\83\97á\83\94á\83\91á\83\94á\83 á\83\95á\83\90á\83\9aá\83\98 2010'],
-            ['LLL',                           '14 á\83\97á\83\94á\83\91á\83\94á\83 á\83\95á\83\90á\83\9aá\83\98 2010 3:25 PM'],
-            ['LLLL',                          'á\83\99á\83\95á\83\98á\83 á\83\90, 14 á\83\97á\83\94á\83\91á\83\94á\83 á\83\95á\83\90á\83\9aá\83\98 2010 3:25 PM'],
+            ['LL',                            '14 á\83\97á\83\94á\83\91á\83\94á\83 á\83\95á\83\90á\83\9aá\83¡ 2010'],
+            ['LLL',                           '14 á\83\97á\83\94á\83\91á\83\94á\83 á\83\95á\83\90á\83\9aá\83¡ 2010 3:25 PM'],
+            ['LLLL',                          'á\83\99á\83\95á\83\98á\83 á\83\90, 14 á\83\97á\83\94á\83\91á\83\94á\83 á\83\95á\83\90á\83\9aá\83¡ 2010 3:25 PM'],
             ['l',                             '14/2/2010'],
             ['ll',                            '14 თებ 2010'],
             ['lll',                           '14 თებ 2010 3:25 PM'],