JQuery Datepicker在与日历交互之前显示错误的语言

时间:2021-03-23 作者:Peter K.

在使用Woody Snippets插件编写为PHP代码段的完全自定义页面中,我需要使用jQuery日期选择器来选择日期。

我正确地导入了必要的文件,并正确地调用和设置了日期选择器。昨天,我将日期选择器连接到一个隐藏的输入字段,这样当我单击一个图标时,日历就会浮动到位,一切都很好,即使是本地化,尽管我没有采取任何措施来本地化日历(导入i18n文件等)。。。

今天,我不得不稍微改变一下页面的布局,所以我必须从头开始(内联)显示日历。根据demo 页面中,为了将日期选择器内联,只需将其附加到div而不是输入字段。

datepicker确实变成了一个内联元素,但本地化消失了。。。最初的语言是英语,直到我以任何方式与日历交互(来回一个月,或选择一个日期等)。一旦我这样做了,本地化就变成了我网站的语言!

更疯狂的是,即使在我专门导入并设置本地化之后,这种情况仍在继续。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js" integrity="sha512-uto9mlQzrs59VwILcLiRYeLKPPbS/bT71da/OEBYEwcdNUk8jYIy+D176RYoop1Da+f9mvkYrmj5MCLZWEtQuA==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/i18n/jquery-ui-i18n.min.js" integrity="sha512-zZ27MiE6yuwkKbHnJ/7ATQF/7l+Jwk5jSxgmLJ1SS5QJexaYswmP3OKBPDVMfM8TlSOudAKHTWH2UtS+0LDddw==" crossorigin="anonymous"></script>
<script>
$(document).ready(function() {
    $(\'#frontpages-date-filter\').datepicker($.extend({},
        $.datepicker.regional[\'el\'], {
            dateFormat: \'yymmdd\',
            minDate: new Date({$min[\'y\']}, {$min[\'m\']}, {$min[\'d\']}),
            maxDate: new Date({$max[\'y\']}, {$max[\'m\']}, {$max[\'d\']}),
            onSelect: function(dateText) {
                window.location.href = location.protocol + \'//\' + location.host + location.pathname + \'?date=\' + dateText;
            }
        }
    ));
});
</script>
在下面的代码中,完全相同的代码从一开始就可以正常工作JSFiddle

从我到目前为止所搜索的内容来看,这很可能与WP v4.6+有关,其中本地化会自动添加到jQuery中,但无论我做了什么尝试,我都无法使内联日期选择器加载本地化,而不必以任何方式与之交互!

顺便说一句,我注意到了完全相同的行为,甚至录制了一段短片video 对于ACF的开发人员来说,他们认为这与他们的插件有关,但他们回答说这不是因为他们的插件,所以因为它是在管理方面,我没有浪费时间来进一步调试它。但这一次,该页面位于公共端,因此必须进行修复!

任何帮助都将不胜感激。提前谢谢。

1 个回复
最合适的回答,由SO网友:Peter K. 整理而成

这一定是我的网站中的冲突。TBH,我无法发现冲突,但我可以通过在datepicker启动之前设置必要的lang字符串来避免冲突,如下所示:

$(function() {
    $.datepicker.regional[\'el\'] = {
        closeText: \'Κλείσιμο\',
        prevText: \'Προηγούμενος\',
        nextText: \'Επόμενος\',
        currentText: \'Σήμερα\',
        monthNames: [\'Ιανουάριος\', \'Φεβρουάριος\', \'Μάρτιος\', \'Απρίλιος\', \'Μάιος\', \'Ιούνιος\', \'Ιούλιος\', \'Αύγουστος\', \'Σεπτέμβριος\', \'Οκτώβριος\', \'Νοέμβριος\', \'Δεκέμβριος\'],
        monthNamesShort: [\'Ιαν\', \'Φεβ\', \'Μαρ\', \'Απρ\', \'Μαι\', \'Ιουν\', \'Ιουλ\', \'Αυγ\', \'Σεπ\', \'Οκτ\', \'Νοε\', \'Δεκ\'],
        dayNames: [\'Κυριακή\', \'Δευτέρα\', \'Τρίτη\', \'Τετάρτη\', \'Πέμπτη\', \'Παρασκευή\', \'Σάββατο\'],
        dayNamesShort: [\'Κυρ\', \'Δευ\', \'Τρι\', \'Τετ\', \'Πεμ\', \'Παρ\', \'Σαβ\'],
        dayNamesMin: [\'Κ\', \'Δ\', \'Τ\', \'Τ\', \'Π\', \'Π\', \'Σ\'],
        weekHeader: \'Εβδ\',
        dateFormat: \'dd/mm/yy\',
        firstDay: 1,
        isRTL: false,
        showMonthAfterYear: false,
        yearSuffix: \'\'
    };

    $.datepicker.setDefaults($.datepicker.regional[\'el\']);

    $(\'#frontpages-date-filter\').datepicker();
});