You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据语言切换jQuery Datepicker的月份、日期相关参数?

解决方案

你的代码报错大概率是两个原因:一是如果页面的html元素既没有smrt-es也没有smrt-en类,monthNames变量会未定义;二是你只处理了monthNames,但没覆盖需求里要切换的dayNames、dayNamesShort等所有参数,同时变量作用域也可能引发问题。下面是快速修复的方案:


1. 先统一定义语言配置对象

把两种语言需要切换的所有参数整理成结构化对象,方便维护和调用:

const langConfigs = {
  'smrt-es': {
    monthNames: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
    monthNamesShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"],
    dayNames: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"],
    dayNamesShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"],
    dayNamesMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sá"]
  },
  'smrt-en': {
    monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
    monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
    dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
    dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
    dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]
  }
};

2. 获取当前页面的语言配置

检测html元素的类,匹配对应的配置,同时设置默认值防止无匹配类的情况:

let currentLangConfig = langConfigs['smrt-en']; // 默认英文配置
if ($('html').hasClass('smrt-es')) {
  currentLangConfig = langConfigs['smrt-es'];
} else if ($('html').hasClass('smrt-en')) {
  currentLangConfig = langConfigs['smrt-en'];
}

3. 合并配置到Datepicker初始化

把语言配置替换掉原来硬编码的参数:

calendar_arrival.datepicker({
  beforeShow: function () {
    $('#ui-datepicker-div').removeClass('departure').addClass('arrival');
  },
  minDate: mindate,
  dateFormat: format,
  closeText: "Close",
  currentText: "",
  firstDay: 0,
  nextText: " >>",
  prevText: "<< ",
  // 替换为语言配置中的参数
  monthNames: currentLangConfig.monthNames,
  monthNamesShort: currentLangConfig.monthNamesShort,
  dayNames: currentLangConfig.dayNames,
  dayNamesShort: currentLangConfig.dayNamesShort,
  dayNamesMin: currentLangConfig.dayNamesMin,
  isRTL: false,
  onClose: function () {
    var minDate = calendar_arrival.datepicker('getDate');
    if (minDate) {
      minDate.setDate(minDate.getDate() + 2);
    };
    calendar_departure.datepicker('option', 'minDate', minDate || 1).on('focus', function () {
      $(this).trigger('blur');
    }); // Date + 1 or tomorrow by default

    if (convertDates) {
      populateCalendar(calendar_arrival);
      populateCalendar(calendar_departure);
    }
  }
});

额外提示

  • 这种方式用默认配置兜底,避免了变量未定义的报错;
  • 后续新增语言时,只需要在langConfigs里添加新的语言对象即可,不需要修改初始化逻辑;
  • 所有需要切换的语言参数都统一管理,逻辑更清晰。

内容的提问来源于stack exchange,提问作者Rob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 05:36:00