如何本地化 jQuery UI DateRangePicker?

Posted

技术标签:

【中文标题】如何本地化 jQuery UI DateRangePicker?【英文标题】:How to localize jQuery UI DateRangePicker? 【发布时间】:2019-06-12 23:13:53 【问题描述】:

我正在使用 jQuery UI DateRangePicker (reference)。 我希望这个 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;

日期显示为

2019 年 1 月 18 日 - 2019 年 2 月 17 日

没有选择使用 moment 设置的语言环境,结果始终为英语(默认)。

注意:我没有设法让 minDate 和 startDate 与 moment() 一起工作,所以如果有人对此有所了解。请帮帮我!

【问题讨论】:

如果它使用$.ui.datepicker 作为小部件的基础,您应该能够以相同的方式进行本地化。基于来自 git 的详细信息,一个类似于 Google Analytics 中使用的日期范围选择器的 jQuery UI 小部件;支持多月、自定义预设范围和智能定位; ThemeRoller-ready 和移动友好。它没有声明它本身支持它。 我认为,一旦你初始化了 daterangepicker,你就需要处理 datepicker 对象并设置区域默认值。需要对其进行测试。 @Twisty 感谢您的回答!如何确定小部件的基础? 我还在努力。我想你只想.extend() datePickerOptions 与来自$.datepicker.regional[] 的返回对象。有两种方法可以做到这一点,一种在初始化中,一种在初始化后。 【参考方案1】:

所以我建议以下示例:

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 表示法语。所需的本地化文件应包含在主日期选择器代码之后。每个本地化文件都将其选项添加到可用的本地化集中,并自动将它们应用为所有实例的默认值。本地化文件可以在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/

该示例没有语言文件,因此不会给出正确的结果,但代码可以按预期工作。

希望对你有帮助。

【讨论】:

以上是关于如何本地化 jQuery UI DateRangePicker?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NPM 同时获得 JQuery-UI 和 datepicker 本地化?

如何根据月份获取 dateRange

我如何将 Postgres DateRange 类型与 TypeOrm 一起使用

如何删除/更改 JQuery UI 自动完成助手文本?

JQuery UI之Autocomplete

react-daterange-picker 并排显示上个月