Как локализовать jQuery UI DateRangePicker? - PullRequest
0 голосов
/ 18 января 2019

Я использую jQuery UI DateRangePicker ( ссылка ). Я хотел бы, чтобы этот механизм выбора даты был доступен на 3 языках (nl, fr и en).

Я буду использовать инструкцию switch для установки настроек календаря.

switch(curr_lang) {
        case 'nl':
            moment.locale('nl');
            var daterangepicker = $("#search-vac-daterange").daterangepicker(
                {
                    initialText : 'Selecteer datums',
                    dateFormat: 'd MM yy',
                    datepickerOptions: {
                        minDate: new Date(),
                        startDate: new Date(),
                        maxDate: '+2y'
                    },
                    presetRanges: [{
                        text: 'Vandaag',
                        dateStart: function() { return moment() },
                        dateEnd: function() { return moment() }
                    }, {
                        text: 'Volgende 7 dagen',
                        dateStart: function() { return moment() },
                        dateEnd: function() { return moment().add(7, 'days') }
                    }, {
                        text: 'Volgende 30 dagen',
                        dateStart: function() { return moment() },
                        dateEnd: function() { return moment().add(30, 'days') }
                    }, {
                        text: 'Volgende 6 maanden',
                        dateStart: function() { return moment()},
                        dateEnd: function() { return moment().add(6, 'months') }
                    }, {
                        text: 'Volgend jaar',
                        dateStart: function() { return moment() },
                        dateEnd: function() { return moment().add(1,'years') }
                    }]
                }
            );
            break;
}

Дата отображается как

18 января 2019 г. - 17 февраля 2019 г.

Локаль, установленная с моментом, не берется, и результат всегда на английском языке (по умолчанию).

ПРИМЕЧАНИЕ: Мне не удалось заставить minDate и startDate работать с moment (), так что если у кого-нибудь есть подсказка для этого. Пожалуйста, помогите мне!

1 Ответ

0 голосов
/ 19 января 2019

Итак, я бы посоветовал следующий пример:

var cl = "en";
$(function() {
  var drp = $("#search-vac-daterange").daterangepicker({
    datepickerOptions: $.extend({
      minDate: new Date(),
      startDate: new Date(),
      maxDate: '+2y'
    }, $.datepicker.regional[cl])
  });
  var cdrp = drp.data("comiseoDaterangepicker");
  console.log(drp, cdrp);
});

Рабочий пример: https://jsfiddle.net/Twisty/c5db9rng/20/

Так что это добавляет локализацию. Если мы рассмотрим шаги в примере DatePicker, они советуют сделать следующее:

$( selector ).datepicker( $.datepicker.regional[ "fr" ] );

Или:

$( selector ).datepicker( "option", $.datepicker.regional[ "fr" ] );

Каждая локализация содержится в своем собственном файле с кодом языка, добавленным к имени, например, jquery.ui.datepicker-fr.js для французского языка. Нужный файл локализации должен быть включен после основного кода DatePicker. Каждый файл локализации добавляет свои параметры к набору доступных локализаций и автоматически применяет их как значения по умолчанию для всех экземпляров. Файлы локализации можно найти по адресу https://github.com/jquery/jquery-ui/tree/master/ui/i18n.

Так что это также важно знать. Поэтому для вашего кода я бы посоветовал следующее.

$(function() {
  switch (curr_lang) {
    case 'nl':
      moment.locale('nl');
      var daterangepicker = $("#search-vac-daterange").daterangepicker({
        initialText: 'Selecteer datums',
        dateFormat: 'd MM yy',
        datepickerOptions: $.extend({
          minDate: new Date(),
          startDate: new Date(),
          maxDate: '+2y'
        }, $.datepicker.regional[curr_lang]),
        presetRanges: [{
          text: 'Vandaag',
          dateStart: function() {
            return moment()
          },
          dateEnd: function() {
            return moment()
          }
        }, {
          text: 'Volgende 7 dagen',
          dateStart: function() {
            return moment()
          },
          dateEnd: function() {
            return moment().add(7, 'days')
          }
        }, {
          text: 'Volgende 30 dagen',
          dateStart: function() {
            return moment()
          },
          dateEnd: function() {
            return moment().add(30, 'days')
          }
        }, {
          text: 'Volgende 6 maanden',
          dateStart: function() {
            return moment()
          },
          dateEnd: function() {
            return moment().add(6, 'months')
          }
        }, {
          text: 'Volgend jaar',
          dateStart: function() {
            return moment()
          },
          dateEnd: function() {
            return moment().add(1, 'years')
          }
        }]
      });
      break;
  }
});

Пример полуобработки: https://jsfiddle.net/Twisty/c5db9rng/24/

В примере нет языкового файла, поэтому он не даст правильных результатов, но код работает должным образом.

Надеюсь, это поможет.

...