我试图了解在使用jquery-globalize库时自动设置语言环境并可能动态更改它的最佳实践。
在 jquery globalize 中启动和运行的要求,或者至少据我所知是:
- 包括所需的 JavaScript 文件
- 加载 CLDR 数据
- 设置语言环境
步骤#1超出了这个问题的范围;假设它是前进的先决条件。
第 2 步被记录为纯 JavaScript 看起来像这样,在一个示例中,它们称为“动态”加载:
$.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) {
$.when( $.get( "cldr/main/" + locale + "/ca-gregorian.json" ), ).then(function() { // 标准化函数 }).then(Globalize.load).then (function(){ // 其余的东西 function(s) }); } else { // 处理无效的语言环境 }
?
这就是文档中看起来...清晰的...,但它没有像这样明确记录,所以我不确定我是否错过了我不需要的默认行为代码(因为它们已经是固有的)。
- 为了允许 Web 应用程序的消费者(部署它的 Web 管理员)可扩展的全球化,这是否是文档问题?“你不能只切换到‘fr’,你需要下载CLDR文件,把它们放在X目录下,然后更新‘validLocales’可配置参数,然后修改初始化脚本设置一个新的默认值?这一切似乎都相当很期待有人部署我的应用程序来承担,而不是“添加一个带有 ISO 国家代码的新语言文件,例如 fr.json”。