MooTools日期选择器默认格式

3
我是使用mootools的日期选择器,尝试根据用户所在地本地化格式。
例如:
08/15/13 //American
15.08.13 //English

文档说明默认情况下应该更改format: (*字符串*,默认为默认本地化格式)

但是使用这段代码:

    window.addEvent('domready', function(){
    new Picker.Date($$('input'), {
        timePicker: true,
        positionOffset: {x: 5, y: 0},
        pickerClass: 'datepicker_bootstrap',
        useFadeInOut: !Browser.ie
    });
});

此处使用的是美国日期格式 08/15/13(月份先写)。

我正在进行测试,通过更改Windows 7中的时区设置来进行 日期和时间


3
日期选择器(如果是 Arian 的)使用 Mootools-More 中的 Locale。尝试使用 Locale.use() 并阅读文档:http://mootools.net/docs/more/Locale/Locale。 - Dimitar Christoff
1
谢谢指针...虽然我必须承认,我以为默认意味着它会开箱即用?不是吗?不过我很高兴能够尝试使用Locale.use()并将其输出为Picker的字符串。 - Jamie Hutber
仍然没有找到一个可靠的解决方案。 - Jamie Hutber
我的回答有帮助吗? - Sergio
1个回答

1
我不认为DatePicker可以“开箱即用”地实现这一点。我不确定在客户端脚本中获取用户位置或语言代码是否有一种可靠的方法。
我刚刚尝试了:
var language = window.navigator.userLanguage || window.navigator.language;
console.log(language);

在同一台机器上,我在Chrome中获得了"sv",在Firefox中获得了"en-GB"

使用php / HTTP请求头部大致相同。考虑从服务器端获取信息。这个问题将HTTP_ACCEPT_LANGUAGE作为最佳方式,但是:

$_SERVER["HTTP_ACCEPT_LANGUAGE"] // gives me:
sv-SE,sv;q=0.8,en-US;q=0.6,en;q=0.4 //in chrome
en-gb,en;q=0.5 //in firefox

如果您查看DatePicker.js文件,您将在第一行中找到:
---
name: Locale.en-US.DatePicker
description: English Language File for DatePicker
authors: Arian Stolwijk
requires: [More/Locale]
provides: Locale.en-US.DatePicker
...

这让我感觉它设置为en-US。如果您手动设置,它将起作用。
我的建议是遵循Dimitar的建议,并使用Locale.use()手动设置。例如,在调用DatePicker之前添加Locale.use('sv-SE');,您将获得格式为yyyy-mm-dd的日期。
我编写了一个脚本来读取客户端语言,以尝试使其动态化。它可以工作,但未经测试。这将通过比较Mootools Locale.list()和我上面发布的浏览器/ JavaScript答案来分配语言:
var language = window.navigator.userLanguage || window.navigator.language;
console.log(language); //gives the results I wrote above (sv/en-GB resp. Chrome/FF)
var list = Locale.list().length;
for (var i = 0; i < list; i++) {
    if (Locale.list()[i] == language) { //check if it's a full match
        Locale.use(language);
    } else { 
// go for the first part of the "sv-SE" and find a match
// this is a compromise, it gets the right language but might miss the right country
        var langArray = language.split('-');
        var locArray = Locale.list()[i].split('-');
        for (var k = 0; k < list; k++) {
            if (langArray[0] == locArray[0]) {
                Locale.use(Locale.list()[i]);
            }
        }
    }
}
console.log(Locale.getCurrent().name); // gives sv-SE/en-GB resp. Chrome/FF
new Picker.Date($$('input'), { 
// etc...

如果您认为它有用,可以微调它... 这里演示

我对一种可以在Locale.use()中使用的客户端位置查找方式产生了兴趣,因此我提出了这个问题,以便了解是否有现代化的解决方案。问题链接:https://dev59.com/AWMm5IYBdhLWcg3wX98W - Sergio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接