使用decj简化Web前端开发(三) 声明式国际化

引言

本期将介绍decj的国际化(I18N)支持,包括声明式多语言支持和声明式CSS文件动态按需加载。

声明式CSS文件按需加载

使用decj框架,开发人员只需要在模块定义中声明模块所需的各个CSS文件,即可实现这些CSS在该模块被加载时而被动态加载,而无需事先在页面中添加link标签来引用各个CSS文件。

模块定义的css属性用于声明模块所需的各个CSS文件。该属性值是一个字符串数组,其各个元素为所要加载的CSS文件的URL。如果只需要加载一个CSS文件,css属性的值也可以是一个字符串。如清单19所示:

清单 19. 使用decj的声明式CSS文件加载

css:["dialog.css","menu.css"]

decj在实际加载模块定义的CSS文件时,可以根据当前的Locale加载相应的CSS文件。比如,清单19中指定了“dialog.css”,那么当decj根据其算法明确了当前的Locale是“zh_CN”时,名为“dialog-zh_CN.css”的文件会被加载。这样,可以实现在多语言情形下,不同语言的页面显示时可以使用不同的页面风格。

decj也支持加载托管在其它域名上的CSS文件,即实现跨域的CSS文件加载,从而支持CDN(Content Delivery Network)。对于与页面文件处在同一个域名内的CSS文件,decj会采用AJAX的方式去加载。而对于与页面文件处在不同域名的CSS文件(外部CSS文件),decj会采用link元素的方式动态加载。

但是,由于多数浏览器都不支持用于表示link元素已经加载完毕其内容的事件,如onload、onreadystatechange等,decj需要一些“提示”信息来帮助其确认某个外部CSS文件是否加载完毕。为此,每个外部CSS文件的尾部需要添加一个称为LoadClue的特殊CSS规则。LoadClue规则的选择器必须是一个ID选择器,并且不能与当前模块要动态载入的其它CSS文件中的选择器相同。因此,LoadClue规则的名称通常与其所在的CSS文件的短文件名(不包含表示Locale的字符串)加“-Clue“相同。LoadClue规则的声明部分需要包含“display:none”。比如,有个外部CSS文件的URL为“http://cdn.site.com/css/dialog-zh_CN.css”,那么该CSS文件的尾部需要添加一个选择器为“#dialog-Clue”的LoadClue规则,如清单20所示:

清单 20. 加载外部CSS文件所需的“提示”

#dialog-Clue{
display:none;
}

如果LoadClue规则的选择器名称与其所在的CSS文件的短文件名不同,则在模块定义中声明CSS文件时,需要在相应的URL末尾附加选择器的名称。如清单21所示:

清单 21. 在外部CSS文件URL后添加“提示”
css:["http://cdn.site.com/css/ dialog-zh_CN.css#dialog-LoadClue"]

声明式多语言支持

使用decj框架开发支持多语言的Web应用,开发人员无需编写繁琐的代码。只需要以下3个步骤即可实现。

第一步,创建资源文件。decj框架中,资源文件其实也是一个Javascript模块。资源文件的文件名中需要包含相应的Locale。比如,一个适用于中国大陆中文简体(对应的Locale为zh_CN)的资源文件的文件名中应该包含“zh_CN”,如“userInfo-zh_CN.js”。清单22展示了示例资源文件userInfo-zh_CN.js的内容。保存资源文件的时候,注意将文件的文本编码设置为UTF-8,以避免页面上显示相关字符串时出现乱码的问题。

清单 22. 使用decj定义资源文件---中文

define({
  "expertise-area":"专长领域",
  "firstname":"名",
  "lastname":"姓"
});

再添加一个适用于英文的名为“userInfo-en_US.js”的资源文件,该文件内容如清单23所示:

清单 23. 使用decj定义资源文件---英文

define({
  "expertise-area":"Expertise Area",
  "firstname":"First name",
  "lastname":"Last name"
});

第2步。在模块定义中声明模块需要引用的资源文件。模块定义的resources属性用于声明模块所需的各个资源文件。resources属性的值是一个数组。该数组的每个元素是模块所需的资源文件的URL。在声明资源文件的URL时,无需指定文件名中的Locale部分(如“-zh_CN”),因为decj会根据当前浏览器的语言设置自动加载相应Locale的资源文件。如清单24代码所示:

清单 24. 在模块定义中声明资源文件

define(['jquery','decj'],function(jQuery,decj){
  //…
  return {
      //…
     resources:['res/userInfo','res/anotherRes']
      //…
  };
});

第3步。在模块页面中使用资源文件中定义的字符串。在页面中使用资源文件中定义的字符串只需要在相关HTML元素的class属性值中添加一个名为“res”或“res-replace”的类,并将该元素标签内容设置为资源key。如清单25中的HTML代码所示:

清单 25. 在模块页面中使用资源字符串

<label>
    <label class="res-replace">firstname</label>
    <input name="fn" type="text" value="firstname" title="firstname" />
  </label><br />
  <label>
    <label class="res-replace">lastname</label>
    <input name="lastname" type="text" value="lastname" title="lastname" />
  </label><br />

  <label>
    <label class="res-replace">expertise-area</label><br />
    <select multiple="true" name="expertise">
      <option value="java">Java</option>
      <option value="cpp">C++</option>
      <option value="Javascript">Javascript</option>
      <option value="design-pattern">Design Pattern</option>
      <option value="oracedb">Oracle Database</option>
      <option value="css">CSS</option>
      <option value="html">html</option>
    </select>
  </label>

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索css
, 文件
, 模块
, 清单
, 加载资源
, 资源
, css文件
, 一个
, 资源动态加载
, AJAX实现按需加载
, 加载运行CSS文件
, yii2加载css
, CSS加载
加载css
前端国际化、web前端国际化、前端国际化插件、angularjs前端国际化、前端页面实现国际化,以便于您获取更多的相关知识。

时间: 2024-09-17 04:27:37

使用decj简化Web前端开发(三) 声明式国际化的相关文章

使用decj简化Web前端开发(二) 声明式表单增强和页面初始化

引言 表单(Form)是Web应用中数据展现和收集常用的HTML元素.开发人员经常需要处理表单的数据填充.数据校验和格式化以及数据打包.另外,页面在加载完毕后往往需要执行一段初始化逻辑.本期将介绍decj对HTML表单的声明式增强和声明式页面/模块初始化这2个特性. 声明式表单功能增强 decj以声明式编程的方式对表单数据展现和收集功能进行增强.在数据展现方面,decj支持根据指定的数据自动将数据填充到表单中.对表单字段值进行自动格式化.在数据收集方面,decj支持对表单字段值进行自动校验.对表

使用decj简化Web前端开发(一)

声明式Javascript动态加载和浏览器事件绑定 引言 Web前端开发中,开发人员经常需要处理一些常规问题,如: 在页面中引用多个相互存在依赖关系的Javascript文件 在页面中引用CSS文件 浏览器事件绑定 表单的数据填充.数据打包提交.数据校验和格式化 页面初始化逻辑 采用传统的命令式编程范式来处理这些问题时,开发人员不得不反复地通过编写代码调用相关API来完成这些常规任务.事实上,开发人员的主要精力应该集中在业务逻辑实现上,而非在这些常规任务上过多消耗时间.声明式编程范式可以帮助开发

极客Web前端开发资源大荟萃

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 前端开发已经成为当前炙手可热的技术之一.此次我们总结的前端开发包含了相关技术和流行趋势,希望从中大家可以挖掘你们所需要的,并带给你们最有价值的帮助!原文来自:极客标签 良心ui - 基于bootstrap 全面兼容ie6+的前端框架 良心ui - 基于bootstrap 全面兼容ie6+的前端框架. 前端代码回放:CSS3中的box-shadow用法 关于box-shadow的用法,分享出来给有需要的人使用. 360周鸿祎:互联网成功十大案

我的Web前端开发(一)

   从别人的blog中看到,做前端开发的没有用C语言,或者是C++做底层开发的有前途,有技术含量,被重视,因为前端开发门槛比较低,太容易上手啦.        经过这些日子的实践和学习,我个人觉得前端开发并没有他们想象的那么简单,这是一份综合素质要求比较高的工作,不是你会了HTML.CSS和JavaScript就能成为一名优秀的前端开发工程师.       一位优秀的Web前端开发工程师在知识体系上既要有广度,又要有深度,既要把网站的界面更好地呈现给用户,又要让用户使用的方便舒服.所以web前

Web前端开发工程师基本要求

      一位好的Web前端开发工程师在知识体系上既要有广度,又要有深度,所以很多大公司即使出高薪也很难招聘到理想的前端开发工程师.现在说的重点不在于讲解技术,而是更侧重于对技巧的讲解.技术非黑即白,只有对和错,而技巧则见仁见智.以前会Photoshop和Dreamweaver就可以制作网页,现在只掌握这些已经远远不够了.无论是开发难度上,还是开发方式上,现在的网页制作都更接近传统的网站后台开发,所以现在不再叫网页制作,而是叫Web前端开发.Web前端开发在产品开发环节中的作用变得越来越重要,

《Web前端开发精品课 HTML与CSS进阶教程》——第一部分 HTML进阶第01章 HTML基础知识1.1 HTML和CSS进阶简介

第一部分 HTML进阶 第01章 HTML基础知识 1.1 HTML和CSS进阶简介 1.1.1 你真的精通HTML和CSS吗 我们都知道,前端技术最核心的三大技术是HTML.CSS和JavaScript.HTML定义网页的结构,CSS定义网页的外观,而JavaScript定义页面的行为.其中HTML和CSS是前端技术中最基础的东西. HTML和CSS入门容易,精通却很难,特别是CSS."什么?精通很难?我很确定我已经精通CSS了啊!"这种话往往是出自学习三两个月.技术刚入门的人之口.

《Web前端开发最佳实践》——导读

前 言 Web前端开发入门难度并不高,但是初学者如果没有一个很好的学习和编码习惯,则开发水平的提高速度会变得很慢.下面几点是影响Web前端开发者技术提高的主要因素. 其一是开发者缺乏良好的实践指导.Web前端兴起的时间不长,很多大学都还没有来得及开一门专门讲解Web前端的课程,因此,大部分的Web前端开发者都是通过自学的方式来了解Web前端相关的技术.开发者学习前端技术的渠道很多,其中很大一部分是通过查找网络资源的方式,而网络上充斥着大量的错误或者过时的实践方法,这些实践方法很容易误导初学者,使

html5-请问现在热门的web前端开发语言或技术,都有哪些啊?

问题描述 请问现在热门的web前端开发语言或技术,都有哪些啊? 因一开始入门就是学的js,然后就自然转上jquery了.后恰逢 html5 技术的发展,一直就用jquery+css+js,搞定了我遇到的几乎所有的事,后端就用的php+mysql,感觉简单也够用了. 最近遇到一大帮 JSP 应聘前端工程师,反而 jquery 程序员很少很少,就纳闷了,JSP 很好用吗?我一直觉得HTML5技术下,是可以取代JSP ASP什么的. 解决方案 html5我觉得在移动端使用的非常多 因为能跨平台,但是不

《Web前端开发最佳实践》——2.5 Web前端代码开发和调试

2.5 Web前端代码开发和调试 2.5.1 Web前端集成开发环境 很多集成开发环境(IDE)都集成了前端代码IDE,如Visual Studio.Eclipse等,但在纯粹的前端开发中,这些IDE显得不够强大而且不够轻量.这里推荐两款强大的IDE:Aptana Studio和WebStorm. Aptana Studio是一个开源的Web开发工具,有非常强大的JavaScript编辑器和调试器(见图2-4).它的主要特性包括: JavaScript函数.HTML及CSS的Code Assis