【发布时间】:2015-08-07 17:06:47
【问题描述】:
我正在尝试了解在使用 jquery-globalize 库时自动设置区域设置并可能动态更改它的最佳实践。
在 jquery globalize 中启动和运行的要求,或者至少据我了解是:
- 包含所需的 JavaScript 文件
- 加载 CLDR 数据
- 设置语言环境
第 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 被加载。像这样?:函数 changeLocale(locale) { // 此示例中未显示“validLocales”,但可以将其想象为我在分发中明确提供 CLDR 的语言环境数组 if(validLocales.indexOf(locale) !== -1) {
$.当( $.get("cldr/main/" + 语言环境 + "/ca-gregorian.json" ), ).then(函数() { // 归一化函数 }).then(Globalize.load).then(function(){ // 其余的东西函数 }); } 别的 { // 处理无效的语言环境 }
?
这就是文档中看起来...很清晰...的所有内容,但没有像这样明确记录,所以我不确定我是否错过了我没有的默认行为'不必编码(因为它们已经是固有的)。
- 为了允许 Web 应用程序的消费者(部署它的 Web 管理员)可扩展全球化,那么这是否是文档问题? “你不能只切换到‘fr’,你需要下载CLDR文件,把它们放在X目录下,然后更新‘validLocales’可配置参数,然后修改初始化脚本设置一个新的默认值?这一切似乎都相当期望有人部署我的应用程序来承担,而不是“添加一个带有 ISO 国家代码的新语言文件,例如 fr.json”。
【问题讨论】:
标签: jquery-globalize jquery-globalize