首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Dojo 国际化 Web 应用程序(1)

使用 Dojo 国际化 Web 应用程序(1)

简介 Wikipedia 将国际化定义为在无需进行工程性更改的前提下让所设计的软件应用程序能够适应各种语言和地区。(参见 )。根据这个定义,为了得到国际化的软件,有三个元素必不可少:
  • 负责告知软件其所要运行的本地语言环境的一个元素
  • 可应用到软件当前的本地语言环境的一组翻译文件
  • 负责连接前两个元素的一个组件
在本文中,我们将创建一个简单的国际化 Web 应用程序并展示针对前两个元素的 Dojo 工具箱标准(更多有关 Dojo 的信息,参见 )。之后,我们将针对第三个元素仔细研究两个 Dojo 用例:html 文件或小部件。
在一个基于 Dojo 的应用程序内设置本地语言环境本地语言环境是一个参数,用来定义应用程序用户界面应该使用的语言。有的时候,仅仅指定语言可能还不够。不同的国家有可能使用的是近乎相同的语言,只有一些细微差别,比如拼写不同(例如,在美语中的 “center”,在英语中则是 “centre”),再比如同一个意思的用词不同(比如美语中的 “Elevator”,在英语中则是 “Lift”)。 因此,本地语言环境参数除了语言代码之外还要包含国家代码,以此指定应该使用的这种特定的语言。
Dojo 提供了两种用来指定 Web 应用程序本地语言环境的机制。第一种是编程方式(在运行时或设计时),另一种是借助浏览器的默认本地语言环境(在浏览器安装期间定义)设置。
通过编程的方式设置本地语言环境,实际上是在全局对象 djConfig 内指定 “locale” 属性的值。 的示例展示了如何在设计时将本地语言环境设为 en-us:  
清单 1:在设计时使用编程方式设置本地语言环境
1
<script type="text/javascript" SRC="dojo.js" djConfig="locale:'en-us'"></script>




        另一种可能性是通过编程方式计算本地语言环境(例如,通过从 URL 抽取),然后再设置本地语言环境。 的示例展示了如何在运行时使用编程方式设置本地语言环境:
清单 2: 在运行时使用编程方式设置本地语言环境
1
2
3
4
5
6
7
8
9
10
11
12
<script type="text/javascript">
// Note: this must be done before dojo loads!!!
var djConfig = new Object();
var theLocale = getLocale(); // this function is responsible to determine
                            // the appropriate locale
djConfig.locale = theLocale;

function getLocale()
{
    return “en-us”;
}
</script>




        最后一种可能性就是不指定本地语言环境,而是使用浏览器的默认本地语言环境,而这个默认设置是 Dojo 从导航对象提取出来的。默认的行为,正如任何默认设置一样,在您能预见客户机的浏览器和机器配置的情况下非常有用。但这种情况很少见,相反,比较常见的是浏览器使用非用户母语的语言安装或应用程序不熟悉的语言安装(所以应该要避免使用这种方式)。         
Dojo 应用程序内的翻译文件理解了如何设置应用程序的本地语言环境之后,就可以开始学习如何为 Dojo 应用程序提供一组翻译文件,称为 “资源包(resource bundle)” 。
一个资源包是命名相同的一组文件,其中的每个文件都适用于特定的一个本地语言环境。而且每个文件都应该是 JSON 格式。对于我们的这个欢迎应用程序,资源包文件都被命名为 greeting.js。其内容如  所示。
清单 3:针对不同英语语言环境的资源包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
针对美式英语语言环境的内容为:


{
    PAGE_TITLE:"God bless America",
    GREETING: “What’s up”,
    PERSON: “dude”,
    GREETING_SENTENCE: “${greeting} ${personTitle}”
}
  
                       
      <br>针对英式英语语言环境的内容为:


{
    PAGE_TITLE:"God save the queen",
    GREETING:”Hello”,
    PERSON:”dear”,
    GREETING_SENTENCE: “${greeting} ${personTitle}”
}




<br>针对澳大利亚英语语言环境的内容为:



{
    PAGE_TITLE:"God bless the ozis",
           GREETING:”G’day”,
    PERSON:”mate”,
    GREETING_SENTENCE: “${greeting} ${personTitle}”
}

<br>针对法语本地语言环境的内容为:


{
    PAGE_TITLE:"Vive la France",
    GREETING:”Bonjour”,
    PERSON:”monsieur”,
    GREETING_SENTENCE: “${greeting} ${personTitle}”
}




        现在需要将这些文件放入合适位置以便 Dojo 能够读取。为此,需要以 Dojo 期望的方式构造文件夹的层次结构。假设应用程序在位置 “../../sample/application” 定义了一个称为 “sampleApp” 的模块路径。那么所需创建的目录结构将类似 。
图 1. 目录结构基本上,名为 “nls” 的文件夹应该位于所定义的模块之下。它包含 locale 文件夹,使用小写格式,并用连字符分隔语言代码和可选的国家代码。
注意,在翻译文件内,我们已经将欢迎分成两个部分,这是因为不同的语言有不同的句子结构,欢迎词的构成也就有所不同。因此,我们需要以一种国际化的方式来从各部分构造欢迎词。为此,我们使用了 Dojo 的实用工具 dojo.string.substitute,它接收字符串的模板和参数化的值并用给定的值替换这些占位符。模板本身是资源包内的 GREETING_SENTENCE 项。
返回列表