在jquery globalize

时间:2015-08-07 17:06:48

标签: jquery-globalize

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

在jquery全局化中启动和运行的要求,或者至少我理解的是:

  1. 包含所需的JavaScript文件
  2. 加载CLDR数据
  3. 设置区域设置
  4. 第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. 要设置区域设置,您需要了解文化。从用户代理字符串或某些字符串中提取它是一种好习惯吗?如果我没有提供检测到的区域设置,我应该手动回退到给定的语言吗?
    2. 换句话说,是否有内置于globalize的功能来处理浏览器或系统文化并尝试自动使用它,或者我是否总是需要明确调用Globalize.locale()

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

      2. 这就是文档中的所有内容......但是没有明确记录,所以我不确定我是否错过了我不知道的默认行为必须编码(因为它们已经固有)。

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

0 个答案:

没有答案