设计可本地化的全球化 Web 站点

来源:互联网 发布:脑子空空的 知乎 编辑:程序博客网 时间:2024/05/23 23:39

转自http://www.microsoft.com/china/msdn/archives/technic/dhtml/designloc.asp

设计可本地化的全球化 Web 站点


Sjoert Ebben 和 Gwyneth Marshall
Microsoft Corporation

1999 年 8 月 27 日

摘要:本文讨论了如何创建可本地化的全球化 Web 站点的细节。作者提供了一些有关确定代码页、分层图形、内容机制方面的提示,以及对 HTML 和 CSS 技术如何在全球化中应用的理解。

目录

  • 简介
  • 字符编码
  • 设计
  • 内容
  • 摘要
  • 要浏览的链接
  • 关于作者

简介

如果您已经阅读了我们的第一篇文章,The Localization Process: Globalizing Your Code and Localizing Your Site(英文),就应当了解在创建一个国际 Web 站点时会遇到的问题。我们将继续讨论在第一篇文章中所提及的设计全球 Web 站点问题,以及如何避免一些标准错误等问题。

什么是全球站点?

根据定义,任何在万维网(WWW) 上的站点都是国际化的。然而,我们将全球站点定义为能够按照用户习惯的形式展示信息的站点;这包括语言、格式化的约定、市场特定的数据等。例如,我们曾经看到过一个亚洲站点,它用一双鞋的 GIF 图像代表主页,而不是用一所房屋。对于那里的用户,一双鞋子远比一所房屋更能引起文化上的共鸣。

然而,全球化却不能对固有的文化问题提供解答,如怎样去解决问题。尽管您自身的文化对站点的结构有深刻的影响,但这些问题很难在世界范围内定义并加以解决。我们将在本文中集中讨论一些特定的全球化问题。

字符编码

在设计 Web 站点时,首先需要确定的问题之一就是使用何种字符编码。下面简要讨论字符编码以及字符编码类型的正反两方面的见解。

字符编码的演变

计算机在内存中使用代码表示字符,使文本能够得以存储和复制。这些字符编码(或代码点)用于表示字符在文本的某一地方中的位置,而不表示其形状、大小和颜色等。

早期计算机的内存是以单元构成的;一个单元代表一个字符。不同的计算机中这些单元的大小是不同的。这会导致两个问题:

  • 不同的计算机可以存储不同数量的代码点。
  • 不同的计算机在相同的代码点存储的字符也不同。

这使计算机间信息的交换变得困难,因此,在早期 7 位字节的时代里,计算机产业对一个单元或字节的长度规定了一个事实上的标准。7 位字节可以对 128 个不同的字符进行编码。这种编码方案足以对大写英语字母进行处理,并扩展某些小写字符。它还包括了标点符号、数字以及一些控制码。新的编码方案被称为“美国信息互换标准代码”,或人们更为熟悉的 ASCII。

当计算主要面向英语,并且基于文本的计算相对不重要时, ASCII 编码方式是有效的。然而,随着计算的进步,字节的大小变为 8 位,这样也就可以存储 256 个编码。因而,扩展 ASCII(也称 ANSI)也就诞生了。代码页概念的国际化也是在此时开始的。代码页是一些可替换的 256 个字符的集合,可在世界上的不同地区使用,或用于不同语言。从那时起,代码页和字符集实际上已成为同义词。

计算机能够识别和处理不同语言的文本已成为必需。这对于单一语言和单一机器而言是容易实现的。然而,当必须在计算机间发送信息时,如果这些计算机使用不同的字符集就会产生问题,原因是一台计算机上的代码点可能代表另一台计算机上的不同内容。

若要正确表示并且归档保存由多种语言混合而成的文本时,该问题就变得更为突出了。由于东亚国家使用的是象形文字,另一件麻烦事发生了,东亚象形文字的字符数很大(中文拥有 7,000 到 13,000 个基本字符)。显然这些语言不适合 128 个代码点,不管程序员有多么聪明。所以创造另一种编码方法已成必然。

编码方法最为严重的问题就是由 8 位字节给出的代码空间不足。由于这个问题,人们创造了代码页,并提出了多种不同的编码标准。中国、日本和韩国 (CJK) 字符集需要很大空间,因此人们发明了 16 位的代码。不幸的是,人们至少发明了四种不同的编码。这意味着不同语言文本的转换,譬如中文,只能通过将“外来”编码的字符转换为本地字符的大量的查看 (lookup) 表来完成,这样才能使本地系统显示该信息。

有鉴于此,人们发明了 Unicode,以便提供一个统一的编码标准。Unicode 协会(英文)非 MS 链接,该协会是由很多计算机公司、标准组织和文献行业的相关组织所组成。

Unicode 是一种用于世界上大多数字符的字符编码系统。使用 Unicode,每个字符对应一个单一代码点进行编码,这使计算机系统能够准确交换文本。然而,Unicode 没有以下功能:

  • 排序序列。
  • 字形定义。
  • 字符串比较机制。
  • 文本格式化控制机制。
  • 语言定义。
  • 字符转换机制。

上面每个功能对于完全处理文本文档都是必需的,并且,每个功能都具有单独的标准。在很多情形中(对于字符编码),都存在多个需要协调的标准。

Web 上常用的一种代码页是 UTF-8,它是 Unicode 的一个子集。在 UTF-8 中,每个 16 位 Unicode 字符都作为一个由一个、两个或三个 8 位字节组成的序列进行编码,是一个或两个三个 8 位字节取决于字符的值。下表显示了这种 UTF-8 字节序列的格式(表中以 x 显示的“空闲位”按显示的顺序组合,并从最高有效位到最低有效位进行解释)。

序列中字节的二进制格式

第一个字节 第二个字节 第三个字节 空闲位的数目 可表示的最大 Unicode 值 0xxxxxxx     7 007F 十六进制(127) 110xxxxx 10xxxxxx   (5+6)=11 07FF 十六进制(2047) 1110xxxx 10xxxxxx 10xxxxxx (4+6+6)=16 FFFF 十六进制 (65535)

每单个字节值表示其 UTF-8 功能的方式如下:

  • 00 至 7F 十六进制 (0 至 127):序列中第一也是仅有的字节。
  • 80 至 BF 十六进制 (128 至 191):多字节序列的延续字节。
  • C2 至 DF 十六进制 (194 至 223):两字节序列的第一个字节。
  • E0 至 EF 十六进制 (224 至 239):三字节序列的第一个字节。
注:UTF-8 保持了一种简单、单字节和与 ASCII 兼容的编码方法,只要直接显示的字符不超过 127 个。这意味着技术上声明以 UTF-8 编码的 HTML 文档可以保持为一个普通的单字节 ASCII/ISO-8859-1 文件。即便文档包含大于 255 Unicode 字符也可以保持这样,只要所有大于 127 的所有字符由“和号”实体间接引用即可。

Unicode 编码的字符的示例(用十六进制表示)

16 字节的 Unicode UTF-8 序列 0001 01 007F 7F 0080 C2 80 07FF DF BF 800 E0 A0 80 FFFF EF BF BFF

本地编码与 UTF-8 的对比

两种流行的编码方案为本地编码和 Unicode 或 UTF-8 编码。这里,本地编码指的是某一给定语言或一组语言的一些个别标准,如英语的 ANSI。选择使用哪一种编码方案是很重要的。虽然某些应用程序选择 Unicode 非常理想,但另外一些并非理想。选择了错误的字符编码方法可能会一开始就注定项目的失败。

您的选择将最终取决于站点的结构以及您必须支持哪些浏览器。两种编码方案都有优点和不足之处,下面列出了其中的一些。

  本地编码 UTF-8 支持一种编码   X 被 3.0 版的浏览器支持 X   支持一种编码   X 对于所有语言都是少量下载 X   对于 1252 种语言都是少量下载 X X 与 Netscape 4.0 配合工作状况良好 X   所有后端结构的通用系统   X 新的 Web 技术可以容易并自动地支持没有转换规格的所有 Windows 语言   X

如果选择了本地编码,您的站点结构必须支持所有计划启动的站点市场。事实上,确保您的站点可在所有代码页环境下运行(双向语言可能除外,这涉及很多其他问题)会是一个好主意,这样如果您以后决定在一个新的市场启动时就不必修补大的缺陷。

注意:双向语言指的是一般都从右向左读的那些语言。然而,阿拉伯数字以及一些非英语文本却是从左向右读,就象在英语中一样;所以,这些语言被称为“双向的”。这些语言包括阿拉伯语、希伯来语和泰语。

元字符集

如果某个 HTML 页面的作者没有在每个 Web 页面的首部指定字符集 (charset) 信息,用户可能需要手动调整浏览器的编码选项才能正确地查看该页面,而且页面中包含的任何表格都可能不会正确地工作(您会在后面看到)。对于那些较早的 Web 浏览器,这种情况尤为确实。下面是一些字符集标记的例子。

繁体中文或 Big5 (GB_2312-80)

<META HTTP-EQUIV="Content-Type" content="text/html; charset=Big5">

UTF-8(通用)

<META HTTP-EQUIV="Content-Type" content="text/html; charset=UTF-8">

特殊字符

HTML 标准考虑到了命名的和编号的实体。这些特殊编码允许用户指定字符。例如,"&aelig;" 和 "&#230;" 都指同一字符 - æ。这些实体的表格(英文)可在 http://www.w3.org/TR/WD-html40-970708/sgml/entities.html非 MS 链接 中找到。然而,我们不推举使用命名实体,因为它们并不是在所有的浏览器、操作系统或字体中都运行一致。

有许多输入扩展字符(一般指任何方言字符,如 é、ñ 或 ö,有时还指亚洲字符)的方式:

  • 使用特定语言的键盘设置。举例来说,如果您安装法文操作系统,默认为使用法文键盘,键盘上拥有 "é" 和其他一些字符。您还可以在 Microsoft(R) Windows(R) 的控制面板中切换键盘设置。
  • 按下 ALT 键,同时在您键盘的小键盘上键入从 0128 到 0255 之间的 4 位数字。输入 <Alt>+0255 则会显示 "ÿ" 字符。(这只对西欧语言有效。您可以在 http://www.htmlhelp.com/reference/charset 处找到扩展字符表(英文)非 MS 链接。ANSI 数字是您在按下 ALT 的同时在数字小键盘键入的。)
  • 在安装 Windows 期间,可以安装称作“字符映射表”工具。Windows 安装程序会把“字符映射表”放入您的附件菜单中。这个工具可以以图形方式显示字符,并允许您从该工具中剪切和粘贴这些字符。
  • 输入双字节字符 (DBCS) 的另一种方法就是使用输入法编辑器 (IME),称为 Global IME http://www.microsoft.com/Windows/ie/Features/ime.asp(英文) 非 MSDN Online 链接。它是一个专为 Internet Explorer 4.0(Internet Explorer 5.0 也可使用)设计的组件。可用与传统的 IME 同样的方式 (ALT+~) 启动 Global IME,但您必须首先用左键单击屏幕右下角的任务栏来激活它。如果它已安装则会显示“EN”,并且 Internet Explorer 将成为活动窗口。不象东亚操作系统上运行的传统 IME,Global IME 只能向 Internet Explorer 中输入字符。Global IME 不可能与 Netscape 一同使用。在美国的 Microsoft Windows 平台上,不可能在 Netscape 中输入 DBCS 字符。没有用于 Netscape 浏览器的与 Global IME 匹配的组件。

如果您必须使用某种实体,数字实体会得到更为广泛的支持,因此,如果您无法保证用户的浏览器版本,一般使用实体号码会较为安全。

设计

创建 HTML 页面不难,但创建美观的 HTML 页面则是个挑战。确保这个美观的页面能够本地化则是一个更大的挑战。总之,您为什么要这样做?好,最近一个时期以来使公司的站点变得如此有影响力的原因在于可以使用这些站点建立广泛的国际客户基础。例如,http://www.microsoft.com/china 非 MSDN Online 链接。产品信息可用这些产品的所有本地化语言获得。

为使工作可行,最好使用一个模板,这样就不必针对每一种语言重新设计页面。在以下各节中,我们将告诉您创建用于本地化的 Web 页面的模板时应注意的一些事情。

图形

大多数可以本地化的图形,都是由位于某种结构化的背景上的文本组成的。要将文本本地化,只须对文本进行操作。如果您得到的是 .gif 或 .jpeg 文件,则文本与背景在同一层上,因此更改文本也就意味着更改背景。如果背景只是一种单纯的颜色,您可以容易地替换文本。下面是带有结构化背景的文件的例子:

可以本地化的图形通常以 Adobe PhotoShop 文件(.psd 文件)进行处理。PhotoShop 提供对层的支持,这意味着可以本地化的文本可以存入单独的层中,文件中的其他组件则不必触及。

这些是可以本地化的文本的层:

在页面中,不是使用嵌入文本的 GIF,而使用只带背景的 GIF,并将文本置于背景之上。

下面是如何将文本置于图像之上的例子:

<IMG SRC="image.gif" WIDTH=100 HEIGHT=100><SPAN STYLE="position:relative;top:-50;left:-90;width:80">Text on Top</SPAN>

如果您的确必须包括嵌入文本的文件,则以下一些准则适用于您创建图形时:

  • 提供一个说明完备的分层 PhotoShop 源文件。说明使用了何种字体和哪些颜色。
  • 不要忘记图形中的本地化的文本可能要比英语文本长(平均 30%),因此应留出空间,以备文本扩充。
注:由于对图形进行操作需要另外的技能,所以对图形进行本地化的成本会较高。以下这些准则既适用于 HTML,也适用于软件项目。

表格:自动换行还是不自动换行

表格几乎肯定会导致本地化问题。由于本地化的文本平均比英语文本长 30%,在美国的 Web 页面上能够适合某一表格的文本可能因为过长而不适合本地化页面的表格。其结果是表格宽度将被扩展,表格中的所有文本也都将遵从这个新的宽度。在这种情况下,没有办法使表格保持其定义的大小。如果使用了表格(或表格中的其中一个单元)的背景图形,则该图形将不会延伸。这样将使用图像的新实例。

下面的图像是一个表格(重复背景)的屏幕捕捉图像,表格将被延伸,因为其中的一个字符串不适合表格:

以下代码显示了使用嵌套表格后延伸问题是怎样变得更糟的:

<TABLE><TR><TD><TABLE><TR><TD></TD><TD></TD><TD></TD></TR><TR><TD><TABLE><TR><TD></TD><TD></TD></TR></TABLE></TD><TD></TD><TD></TD></TR></TABLE></TD></TR></TABLE>

在本示例中,要了解当某些内容自动换行(甚至我已经省去了多余的属性和值!)时如何更改代码是很困难的。组织代码可能会有所帮助:

<TABLE><TR>   <TD>   <TABLE>    <TR>     Etc.

尽管这样,嵌套结构依然是难以调试的。创建您的 Web 页面时,您可以做一些工作使事情变得容易一些。

  • 加入 HTML 注释,以指定新的节何时开始。例如:
    <!-Start of toolbar ->
  • 保持版面设计简洁。如果使用表格,则嵌套不要超过两层。
  • 使用 DHTML 技术。使用 DHTML,您可以通过绝对或相对定位确定区域的位置。确保为本地化文本留出足够的空间;指定起点和终点以及所有的尺寸(顶点,左端,宽度)将使该区域不可扩展。

使用 DHTML 进行版面设计

您已经在上面了解到嵌套表格难以进行本地化。尽管如此,表格本身却一点也不困难。您可以结合 DHTML 单元使用它们,以生成 Web 页面的布局。这可以帮助您减少代码量,同时利用表格的强大功能。

下面是一个带有嵌套表格的三种颜色的布局的代码示例:

<TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0"><TR>  <TD BGCOLOR="#FF0000">Who's afraid of</TD></TR><TR>  <TD>   <TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0">    <TR>     <TD WIDTH="100" BGCOLOR="#FFFF00">these </TD>     <TD BGCOLOR="#0000FF">colors?</TD>    </TR>   </TABLE>  </TD> </TR></TABLE> 

下面是一个带有 DHTML 与表格的组合的三种颜色的布局的示例:

<DIV STYLE="width:100%; background-color: red">Who's afraid of</DIV><TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0"> <TR>  <TD WIDTH="100" BGCOLOR="#FFFF00">these </TD>  <TD BGCOLOR="#0000FF">colors?</TD> </TR></TABLE>

表单和排序顺序

表单和排序顺序是密切相关的,这是由于排序所需大多数都应用于表单中的下拉列表中。对于二者,字符编码都可能导致问题。如果您希望发布数据并希望数据采用某一特定的字符格式,您需要在页面的元标记中设定正确的编码。因此,如果您希望向某一数据库发布 UTF-8 字符,您需要指定:

<META HTTP-EQUIV=Content-Type content="text/html; charset=UTF-8">

如果您不这样做,表单单元(如输入框)中的字符将不会转换为 UTF-8,它们将按照您在浏览器中的设置(在 Internet Explorer 中,您可以在“语言”下的“选项”对话框中更改本设置)保持为标准编码。当使用来自数据库中的数据填入表单时,也需要应用相同的机制。您需要设置页面中的编码,以确保表单中的所有数据能够正确显示。

排序顺序并不是对于所有语言都是相同的,特别是那些不使用西方字母的语言。例如,在瑞典,某些扩充字符排序在字母 Z 之后。经过本地化后,字的首字母也可能发生变化,因而改变其在排序顺序列表中的位置。例如,“The Hague”在荷兰被称为“Den Haag”,也可称为“s-Gravenhage。”不同的拼写将改变该城市在排序顺序中的位置。

排序顺序 1 本地化的排序顺序(荷兰) Brussels Brussel Cologne Den Haag (The Hague) Hanover Hanover The Hague Keulen (Cologne)

如要构建一个全球化的 Web 站点,您需要要么找出一种自动排序项目(这可能是一项非常困难的任务)的方法,要么确保本地化人员在对代码进行本地化时可以改变排序顺序。在后端,SQL 中的排序顺序在 SQL 服务器安装期间确定。排序顺序中的任何改变都需要重建数据库。

一种可能的自动排序数据的方法就是通过一个针对所需语言使用正确的排序机制的控制进行分析。这仍然需要您在该控制中指定一种语言。在客户端决定这样做可能无效,因为用户正在运行的操作系统和浏览器可能与您对某一特定市场所期望的不同。使用类似这样的控制的另一个缺点就是性能将会降低。

通过在页面本地化阶段的手动交互,可以使用户体验到最快的速度。这需要本地化人员亲自对列表进行排序。例如,这可以通过使用 Microsoft Excel 来完成,或在涉及多种语言时使用 Microsoft Word。而在页面发布时,我们不知道有什么工具能够在 HTML 中完成此项工作。

层叠样式表

对于本地化而言,层叠样式表 (CSS) 最优异的功能之一在于容易全局更改 Web 页面的字体。正如我们在第一篇文章中提到的,字体对于在市场中展示您的团体的形象是至关重要的。大多数美国的 Web 站点都使用某些字体(Arial, Times New Roman 等)进行设计。尽管这些字体一般还可用于西欧的语言,它们没有包含日文、朝鲜文、繁体中文、简体中文、俄文或其他语言。

下面是一个典型的样式定义:

Body{font-family: Verdana;font-size:9pt;}

下面是一位日本本地化工作人员更改字体后的同一样式。只需在一个位置进行简单的改动,这个站点就变得对于数百万用户清晰易读了:

Body{font-family: MS Pゴシック,MS P Gothic,MS Gothic;font-size:9pt;}
注:如果您不能看到日语文本,这是由于您没有相应的 Microsoft Internet Explorer 多语言支持。您可以直接从我们的 Internet Explorer 站点 http://www.microsoft.com/windows/ie/global/newprodpop.htm (英文) 非 MSDN Online 链接下载语言包。

文本大小调整

正如 HTML 表格需要设计为能够扩展,所有的对话框也是这样。例如,下面是 MSN.com 组发给我们进行本地化的一个对话框的原始代码:

<style>INPUT{width:50px;margin:8px,3px;}</style></HEAD><input type=button value=OK  accesskey="o" onclick="go(true);">
<input type=button value=Cancel accesskey="c" onclick="go(false);">

在进行巴西葡萄牙语的本地化期间,工作人员发现“Cancelar”(取消)按钮被截短了。通过对 CSS 的简单的编辑,这个问题很轻松地解决了。行内样式和样式表是控制大小属性的一种有效的方法:

<style>INPUT{width:75px;margin:8px,3px;}</style><input type=button value=OK  accesskey="o" onclick="go(true);">
<input type=button value=Cancelar accesskey="c" onclick="go(false);">

公共内容

为使站点在外观和感觉上保持一致,一些元素会在每个页面上重复出现。导航或拒绝及版权文本就是这种情况的例子。当您要将某一站点本地化时,您不希望为对相同的单词和字符串多次进行本地化而花费金钱。这就是引入 Include 文件的原因。您可以只对一个文件指定内容中的重复元素,然后在所有相应的页面中包含这个文件。

下面是一个 Web 页面上公共内容的例子:

Code (using ASP):<!--#include virtual="/common/footer.inc"-->

内容

代码和内容的分离

为了对某一站点进行本地化,翻译人员必须在翻译工具中打开文件。这些工具中有一些能够将 HTML “锁定”,这样,翻译人员无法接触到标记或脚本。然而,并不是每个公司都能获得这样的工具,或是这些工具没有提供完整的安全功能。在这种情形下,代码/内容分离不失为一个好的解决办法。通过将代码从内容中分离出来,翻译人员将只能看到文本,而功能性则得以保护,这不过是由于它是不可见的。

在开始讨论如何使代码与内容分离的示例前,让我们来对内容和代码实际上是什么做一个稍进一步的分析。

Web 页面一般由三个层次组成;这些层次看上去即便对创建页面的人来说也不是明显的。几乎所有页面都有一个用户界面(UI),它被定义为用户进行交互的程序部分。UI 是用户看到的东西,也是使页面看起来“很棒”的东西。大多数页面还有代码,它被定义为脚本(无论它在客户端还是在服务器端)。代码使页面成为交互式的,并使站点变得很“酷”。内容的定义则不这么明显。内容是页面不断动态改变的部分(如标题新闻),它使您的页面“值得回访”。

UI 常被当作内容,但它是不同的,因为 UI 很少发生改变。这就是为什么很容易创建一个 UI 的模板的原因。内容则经常变化的;如果不是这样,Web 站点很快就会令人厌倦。内容可以是社论剪辑、股票指数,标题新闻等。通常没有必要对这些进行翻译。

内容可以分为两种类型,尽管内容的这两种类型的界限并不总是很清晰。

  • 静态内容:变化有些频繁,但仍然是可以手工处理的内容。
  • 动态内容:更新非常频繁并需要自动处理的内容。

三层站点:

层 功能 代码 引擎。还负责内容的馈送。 UI 外观和感觉。使用模板时功能很强。 内容 信息。频繁更新,使站点有趣。

通过对三层次原则的应用,您可以建立一个对于全球推广而言更容易管理的站点。这是一个大胆的陈述,让我们来看一些示例,以便使您了解 如何做到这样。

示例 1:创建一个页面布局的模板

代码(default.asp): 内容(content.inc): <DIV ALIGN="center">
<CENTER>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
 <TR>
  <TD ALIGN="right" VALIGN="top"> </TD>
  <TD WIDTH="15"></TD>
  <TD VALIGN="bottom" WIDTH="80%"></TD>
 </TR>
 <TR>
  <TD VALIGN="top" WIDTH="20%"></TD>
  <TD WIDTH="15"></TD>
  <TD VALIGN="top" WIDTH="80%"><!--#include file="content.inc"--></TD>
 </TR>
</TABLE>
</CENTER>
</DIV>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.

示例 2:编写脚本

脚本函数内的字符串 脚本函数外的字符串 //声明 variablesvar 浏览器、版本
//函数的变量
//赋值 valuesbrowser = navigator.appName;
version = parseInt(navigator.appVersion);
function getBrowser()
 { if (browser == "Microsoft Internet Explorer" && version == 4)
 { alert("欢迎来到动态 HTML 的奇妙世界");
 } else if (browser == "Microsoft Internet Explorer" && version == 3)
 { alert("请将 Internet Explorer 升级到版本 4 或更高版本"); }}
//声明 variablesvar 浏览器、版本 //函数的 variablesvar L_Browser1, L_Browser2
//可本地化变量
//赋值 valuesbrowser = navigator.appName;
version = parseInt(navigator.appVersion);
//************** 要翻译 ****************
L_Browser1 = "欢迎来到动态 HTML 的奇妙世界"
L_Browser2 = "请将 Internet Explorer 升级到版本 4 或更高版本"
//************** 翻译结尾 ************
function getBrowser()
 { if (browser == "Microsoft Internet Explorer" && version == 4)
 { alert(L_Browser1); } else if (browser == "Microsoft Internet Explorer" && version == 3)
 { alert(L_Browser2); }}

这种分层方法的一个缺点就是站点的设计需要进行很好的全球化工作,这是由于允许字符串增长。

自然语言支持数据

很多最常见的全球化错误是由于使用了针对您自己的市场(一般是美国市场)的硬编写代码自然语言支持(NLS)数据所导致的。您可以通过在项目的设计阶段确定 NLS 数据,并设计出使您的 Web 页面本地独立而很容易地避免这些错误。

市场专属 NLS 数据的最佳资源就是这本由 Nadine Kano 编著的经典书籍 Developing International Software(英文) Non-MSDN Online link;该书现已脱销,但可以在 MSDN Online 获得。

我们大力建议您利用 Win32 NLS API 完成诸如排序、字符输入、字符串映射、日期/时间格式化函数以及所有能对这些函数进行访问的所有编程语言中的其他函数。(Visual C++、Visual Basic 和 Perl 是一些能够使用这些 API 的编程语言的一些例子。)

为使您了解 NLS 数据究竟是什么,下面给出了意大利的大多数 NLS 数据字段。

国家和语言规范

国家代码: 39 国家的英文名称: Italy 缩写国家名称(ISO 标准 3166): ITA 国家的本地名称: Italia DOS 代码页: 850 主要语言: 意大利语 本地语言名称: Italiano 缩写语言名称: ITA

一般数字状况

正数模式: 1.000(不使用符号字符串) 负数模式: -1.000 千分隔符: 圆点 (.) 十进制分隔符: 逗号 例: 1,23 列表分隔符: 分号(;) 数字分组:每组数位的大小在小数点的左侧;各大小值以分号分隔。如果最后一个值为 0,则重复前面的值。如要对千进行分组,可指定 "3;0"。 3;0 例:1.000.000 十个本地数字列表: 0123456789 正值中符号字符串的位置 不使用符号字符串。
例:L. 1.234 负值中符号字符串的位置: 紧靠货币符号,并在其前面。例:-L. 1.234 小数前导零: 是
例:0,55 小数数位: 2
例:1,23 正号使用的字符串: 不使用正号 负号使用的字符串: 减号
例:-L. 1.234 公制度量制: 是 度量单位缩写前留空格: 是,单空格
例:cm 12,34 符号 % 等前的空格: 没有空格
例:50%

货币/货币设置

货币名称: 里拉 货币字段长度: 15 国际货币符号: ITL 正的货币格式: 没有符号字符串,货币符号开头,L 后空格。例:L. 1.000 负的货币格式: 符号字符串和货币符号开头,L 后空格。例:-L. 1.000 货币十进制分隔符: 无 货币小数位数: 0 货币千分隔符: 圆点 (.)
例:L. 1.000 货币分组:每组数位的大小在小数点左侧;大小由分号分隔。如果最后一个值为 0,则重复前面的值。如要对千进行分组,可指定 "3;0"。 3;0 货币符号: L.

日期/日历格式化选项

日期分隔符: 斜杠 (/) 年度中哪个星期被认为是第一个: 第一个星期包含一月的第一个星期四。 星期中的哪一天被认为是第一天: 星期一 短日期格式: dd/MM/yy
例:10/05/99 短日期次序: DMY 长日期格式: dddd d MMMM yyyy
例:venerd 9 settembre 1999 长日期次序: DMY 短日期格式中代表世纪的数位数目: 2
例:10/05/99 短日期格式中月份的前导 0: 是
例:10/05/99 短日期格式中日期的前导 0: 是
例子:09/05/99 长日期格式中代表世纪的数位数目: 4
例:venerd 9 settembre 1999 长日期格式中月份字段的前导 0: 不可用
写出月份的名称 长日期格式中日期字段的前导 0: 否
例:venerd 9 settembre 1999

月份信息

月份名称 1. gennaio(一月)
2. febbraio(二月)
3. marzo(三月)
4. aprile(四月)
5. maggio(五月)
6. giugno(六月)
7. luglio(七月)
8. agosto(八月)
9. settembre(九月)
10. ottobre(十月)
11. novembre(十一月)
12. dicembre(十二月) 简写的月份名称: 1. gen
2. feb
3. mar
4. apr
5. mag
6. giu
7. lug
8. ago
9. set
10. ott
11. nov
12. dic

日信息

日名称: 1. luned(星期一)
2. marted(星期二)
3. mercoled(星期三)
4. gioved(星期四)
5. venerd(星期五)
6. sabato(星期六)
7. domenica(星期日) 日名称简写: 1. lun
2. mar
3. mer
4. gio
5. ven
6. sab
7. dom

时间设置

时间格式: H.mm.ss
例:9.59 时间分隔符: 圆点
例:9.59 表示上午的字符串: 用非 24 小时计时法
9.59 表示下午的字符串: 用非 24 小时计时法
21.59 有前导 0 的钟点:(时间字段中是否使用前导 0) 否
例:9.59 24 小时格式: 是

摘要

正如您已经看到的,设计全球化 Web 站点的一些要素是:

  • 代码页的决定
  • 分层图形
  • 内容机制
  • 对 HTML 和 CSS 技术如何在全球化中应用的理解

要浏览的链接

语言与代码页

  • Internet Explorer 语言包(英文)非 MSDN Online 链接--下载使您能查看世界各地站点的语言包。
  • The Unicode Consortium(英文)非 MS 链接--开发通用字符编码的标准组织。
  • 使用多种语言的万维网工作组(英文)非 MS 链接--关于代码页、如何使用它们以及浏览器的有用信息。

全球化与本地化

  • 关于软件本地化的杰出著作,Developing International Software(英文)作者:Nadine Kano。已脱销,但可在 MSDN 上联机获得。
  • Free Globalization Tips(英文)非 MS 链接,关于一般全球化信息的优秀 Web 站点,由 Xerox 公司的 Richard Ishida 主办。
  • Babel(英文)非 MS 链接,包含有关建立国际 Web 站点的文章和参考资料。
  • MSDN:Going Global(英文)非 MSDN Online 链接

关于作者

Sjoert Ebben 是爱尔兰的 Web 基本队伍中的一位程序管理员,他加盟 Microsoft 已将近四年了。最近的这三年里他一直在 Internet 信息高速公路部门服务,这符合他的驾驶风格。在工作之余,他的妻子 Cathérine 和女儿很肯定可以在 Web 上寻找到他。

Gwyneth Marshall 是一位程序管理员,专门从事 Web 站点的全球化和本地化;目前她正在从事关于 CarPoint(英文)的工作 非 MS 链接。她现在通过她的投资俱乐部涉足全球范围高金融领域。