国际化网站六招鲜

2013年6月14日星期五

发表者: Jens O. Meiert, Tony Ruscoe, Google Web Studio 技术主管

编辑按语:以前我们曾探讨过 Google 网页搜索国际化 的多种处理方式,下面的帖子由 Google Web Studio 小组成员发布,为网络开发者提供了一些有用的小窍门。

现在有很多网站不止提供一种语言版本,而且越来越多的网站开始采用多语种形式。不过,建立多语种网站并不仅仅意味着对网站进行翻译或本地化后就万事大吉了。除此之外,还有一些其他工作要做,而所有这些工作都与国际化息息相关。在此帖中,我们将分享几个有关建立国际化网站的小窍门。

1. 在标记而非样式表中对网页进行国际化
语言和方向是文档内容的固有属性。因此,您应尽可能使用标记而非样式表对网页进行国际化。至少要在 html 元素中使用 @lang 和 @dir:

<html lang="ar" dir="rtl">

避免自行提供解决方案,如使用特殊类或 ID 等。

在样式表中进行国际化时,不要一直依赖 CSS:CSS 规范规定,符合规范的用户代理可以 忽略方向或 unicode-bidi 等属性 (对 XML 而言,情况又有所不同;XML 不提供特殊的国际化标记,因此在这里我们建议使用 CSS)。

2. 对所有语言区域使用同一份样式表
无需为 LTR(从左到右)和 RTL(从右到左)方向分别创建单独的样式表,甚至无需为每种语言单独创建样式表,只需将所有这些捆绑到一份样式表中即可。这样一来,您的国际化规则将更易于理解和维护。

因此,您无需嵌入替代样式表,如:
<link href="default.rtl.css" rel="stylesheet">

只需使用现有样式表即可
<link href="default.css" rel="stylesheet">

采用这种方法时,需要用相应的国际规则对现有的 CSS 规则进行补充。

3. 使用 [dir='rtl'] 属性选择器
既然我们建议您继续使用现有样式表(小窍门 2),那么在选择所需元素来为相反方向设置不同样式时,则需采取其他方法。由于 RTL 内容要求采用特定标记(小窍门 1),因此办法很简单:对大多数现代浏览器来说,只需使用 [dir='rtl'] 即可。
下面来看一个例子:
aside {
float: right;
margin: 0 0 1em 1em;
}

[dir='rtl'] aside {
float: left;
margin: 0 1em 1em 0;
}

4. 使用 :lang() 伪类
可使用伪类 :lang() 来定位特定语言的文档(请注意,这里我们说的是文档,而非文本片段。定位特定语言的文本片段要稍微复杂一些)。

比如,如果您发现粗体格式不太适合中文文档(确实不太适合),则可采用以下格式:
:lang(zh) strong,
:lang(zh) b {
font-weight: normal;
color: #900;
}

5. 对与左右方向相关的值进行镜像
处理 LTR 和 RTL 内容时,务必要对用于改变方向的所有值进行镜像。要注意的属性除了所有与边框、外边距、内边距相关的属性外,还有位置相关属性、浮动或文本对齐属性。

例如,若在 LTR 中文本对齐属性值为“left”,在 RTL 中则需为“right”。

有一些工具可以帮助我们轻松“调换”方向。 CSSJanus 便是其中之一,但这种工具是针对使用“单独样式表”而非“同一样式表”的情况编写的。

6. 关注细节
请注意以下几点:
*区分左右方向的图像,如箭头或背景、区块阴影和文本阴影值中的光源,以及 JavaScript 定位与动画:这些可能需要进行方向调换以适应需要。
*字体和字号,尤其是非拉丁文字的字体和字号:默认字号有时可能会太小,具体取决于所用的脚本和字体。可考虑对字号进行微调,必要时也可对字体进行微调。
*CSS 特殊性 :使用 [dir='rtl'](或 [dir='ltr'])钩子(小窍门 2)时,您所使用的是具有较高特殊性的选择器。这可能会带来一些问题,但只要稍加注意,并进行相应调整即可。

如果您有任何问题或反馈意见,请在 网站站长帮助论坛 留下评论。