我正在尝试了解使用jquery-globalize库时自动设置区域设置并可能动态更改区域设置的最佳做法。
在jquery全局化中启动和运行的要求,或者至少我理解的是:
第1步超出了这个问题的范围;假设它是前进的先决条件。
对于纯JavaScript,将第2步记录为类似这样的内容,在一个示例中,它们称为“动态”加载:
$.when(
$.get( "cldr/main/en/ca-gregorian.json" ),
$.get( "cldr/supplemental/likelySubtags.json" ),
$.get( "cldr/supplemental/timeData.json" ),
$.get( "cldr/supplemental/weekData.json" )
).then(function() {
// Normalize $.get results, we only need the JSON, not the request statuses.
return [].slice.apply( arguments, [ 0 ] ).map(function( result ) {
return result[ 0 ];
});
}).then( Globalize.load ).then(function() {
// Your code goes here.
});
如果我正确理解代码,它会使用一系列承诺:获取JSON,对其进行规范化,然后通过Globalize.load运行,然后执行“您的代码”。
然而,从我经常使用的词来看,这不是动态的。它没有响应用户输入或状态更改。您正在说明“加载英文日历信息”。
还需要其他模块。我不相信globalize会“意识到”你的语言目录结构,这意味着你需要加载所有这些其他文件,并以某种方式将它们传递给Globalize.load(JSON)
。
然后,虽然文档有点脱节,但我相信你需要设置语言环境,这将是第3步。
Globalize.locale( "en" )
最后,关于问题:
换句话说,是否有内置于globalize的功能来处理浏览器或系统文化并尝试自动使用它,或者我是否总是需要明确调用Globalize.locale()
?
我只能设置加载了相应CLDR JSON的文化。那么在语言更改或加载时,我是否需要调用一组类似的调用作为示例“加载”脚本?我不怀疑只是简单地调用Globalize.locale(newLocale)
将会做任何事情,除非加载JSON。像这样的东西?:
function changeLocale(locale){
//“validLocales”未在此示例中显示,但将其想象为我在我的发行版中明确提供CLDR的语言环境数组
if(validLocales.indexOf(locale)!== -1){
$。当(
$ .get(“cldr / main /”+ locale +“/ ca-gregorian.json”),
).then(function(){
//规范化功能
})。然后(Globalize.load)。然后(函数(){
//剩下的东西功能
});
} else {
//处理无效的区域设置
}
这就是文档中的所有内容......但是没有明确记录,所以我不确定我是否错过了我不知道的默认行为必须编码(因为它们已经固有)。