【问题标题】:setting and changing locale in jquery globalize在 jquery globalize 中设置和更改语言环境
【发布时间】:2015-08-07 17:06:47
【问题描述】:

我正在尝试了解在使用 库时自动设置区域设置并可能动态更改它的最佳实践。

在 jquery globalize 中启动和运行的要求,或者至少据我了解是:

  1. 包含所需的 JavaScript 文件
  2. 加载 CLDR 数据
  3. 设置语言环境

第 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" )

最后,关于问题:

  1. 为了设置区域设置,您需要了解一种文化。从用户代理字符串或类似的字符串中提取它是一种好习惯吗?如果我没有提供检测到的语言环境,我应该手动回退到给定的语言吗?

换句话说,globalize 中是否有内置功能来处理抓取浏览器或系统文化并尝试自动使用它,还是我总是需要显式调用Globalize.locale()

  1. 我只能设置加载了相应 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(){ // 其余的东西函数 }); } 别的 { // 处理无效的语言环境 }

?

这就是文档中看起来...很清晰...的所有内容,但没有像这样明确记录,所以我不确定我是否错过了我没有的默认行为'不必编码(因为它们已经是固有的)。

  1. 为了允许 Web 应用程序的消费者(部署它的 Web 管理员)可扩展全球化,那么这是否是文档问题? “你不能只切换到‘fr’,你需要下载CLDR文件,把它们放在X目录下,然后更新‘validLocales’可配置参数,然后修改初始化脚本设置一个新的默认值?这一切似乎都相当期望有人部署我的应用程序来承担,而不是“添加一个带有 ISO 国家代码的新语言文件,例如 fr.json”。

【问题讨论】:

    标签: jquery-globalize jquery-globalize


    【解决方案1】:

    我个人推荐使用 Globalize 构建应用程序的方式是 Application example using webpack and npm

    现在,更直接地回答您的问题...

    1. 为了设置区域设置,您需要了解一种文化。从用户代理字符串或类似的字符串中提取它是一种好习惯吗?如果我没有提供检测到的语言环境,我应该手动回退到给定的语言吗?

    换句话说,globalize 中是否有内置功能来处理抓取浏览器或系统文化并尝试自动使用它,还是我总是需要显式调用 Globalize.locale()?

    Globalize 对应用程序应该如何做没有意见。某些应用程序可能会更好地允许其用户选择站点语言。某些应用程序可能会更好地使用用户代理信息 (https://stackoverflow.com/a/674570/798133)。 Globalize 应该允许这两种用法。

    1. 我只能设置加载了相应 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 { // 处理无效的语言环境 } ?

    这就是文档中看起来...很清晰...的所有内容,但没有像这样明确记录,所以我不确定我是否错过了我没有的默认行为'不必编码(因为它们已经是固有的)。

    你是对的。 Globalize.locale(<locale>) 不会做任何事情,除非预先加载了正确的数据(使用 Globalize.load() 加载数据本身或使用 precompiled formatters and parsers 以获得最佳性能)。所以,是的,应用程序开发人员必须处理这个问题。

    我前面提到的Application example using webpack and npm 负责加载数据并自动生成用于生产的最佳捆绑包。显然,Globalize 允许其他几种安排或用法。如果您有任何其他/更具体的问题,请告诉我。

    为了允许 Web 应用程序的消费者(部署它的 Web 管理员)可扩展全球化,那么这是否是文档问题? “你不能只切换到‘fr’,你需要下载CLDR文件,把它们放在X目录下,然后更新‘validLocales’可配置参数,然后修改初始化脚本设置一个新的默认值?这一切似乎都相当期望有人部署我的应用程序来承担,而不是“添加一个带有 ISO 国家代码的新语言文件,例如 fr.json”。

    当然。我相信我们可以对文档和展示我们使用 Globalize 的 Web 应用程序最佳实践的示例做更多的改进。 Application example using webpack and npm 是我们最近所做的更新,我相信这与您的问题非常相关。如有任何问题,请告诉我。

    【讨论】:

      猜你喜欢
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 2012-05-15
      • 1970-01-01
      • 2011-01-24
      相关资源
      最近更新 更多