L10n, I18n and Unicode
L10n
是英文单词 Localization
的缩写,其中数字 10
是指首字母 L
和末字母
n
之间有10个字母。所以,L10n
就是本地化的意思。就软件来说,大家通常理解的本
地化就是用户界面和文档的翻译;其实不然,本地化有时候非常复杂,它包括
-
数字、日期及时间
-
货币及符号
-
键盘布局和使用
-
排序方法
-
图标、颜色、字体
等等,还常常涉及风俗文化和道德法律的考虑。本地化对软件的用户界面设计、业务逻辑安 排和呈现规范都是考验,软件本地化的资源投入不仅仅是文字翻译。
I18n
类似,是 Internationalization
的缩写,是指国际化。就软件来说,国际化就
是在软件设计时充分考虑其对本地化的友好性——让软件更容易本地化,更容易推广到国际市
场。简单来说,软件国际化不是在需要国际化时再考虑的事情,而是在软件设计之初就要考
虑清楚的事情。
一般来说,软件的国际化通常涉及到代码级的改动。如果国际化设计得好,那么软件的本地
化不会涉及到代码的变化,通常提供资源文件的本地化就可以了。无论进行本地化,还是要
设计国际化,非常重要的问题就是要考虑对各种字符的支持——现在的标准是一律支持
Unicode
。许多中文软件支持的是 GB2312
、GBK
或 GB18030
,这在进行国际化时就
要注意。
Unicode
的历史已经超过 30 年了。大多数的操作系统、网络协议、网络浏览器和大量的
编程语言都支持 Unicode
。它的编码也涵盖了几乎所有的其他字符编码。就最新的
Unicode 13.0.0
来说,它有 143,859 个字符、154 种文字和 3304 个表情符号。
Unicode
还包括可以和其他字符组合的字符,如音调字符 ◌̀ 等。但是,Unicode
不仅
仅是一个字符集,它还包括了标准编码格式——UTF-8,它定义了大小写字符的对应关系、排
序、换行规则、显示解析以及从右向左类文字的处理方法等。可以说 Unicode
是适应全
球语言文字的大集合。
然而,在软件中处理 Unicode
并不简单,有许多细节需要考虑。下面是一些常规要做的
事情。
- Unicode 规范化
有时候,某些看起来一样的字符,实际上是好几个 Unicode
字符组合而成的。为了保持
编码和解码的一致性,软件需要对要使用的字符集进行 Unicode
规范化。许多编程语言
都提供了专门的 Uincode::Normalize
库,程序员要注意的就是整个软件的规范化规则要
保持一致。
- 大小写转换
由于涉及多种语言和多种规则,Unicode
的大小写转换并不简单。比如德语的小写字母
ß
的大写是两个字母 SS
。请使用编程语言提供的 Unicode
大小写支持库,比如
Unicode::Casefold
。
- 排序
和大小写转换类似,排序也和语言种类密切相关。比如,中文就有很多种排序方法,拼音排
序、笔画排序等。Unicode
本身的字符排序并没有特别的意义,但是它明确了排序的算法,
使得许多语言能够实现快速全面的按语言排序规则,比如 Unicode::Collate:Locale
类
库。
- 编码
Unicode
主要有三种编码方式:UTF-32
、UTF-16
和 UTF-8
。
UTF-32
虽然简单统一,但是占用空间太多,所以用得较少。
UTF-16
使用 2 字节(16 位)表示最常用的字符,使用 4 字节表示不常用的字符。
Java、.NET 和 Windows 使用 UTF-16
。
UTF-8
最常用,尤其是在网络上。由于它兼容 ASCII,所以许多旧式的只支持 ASCII 的
程序在 UTF-8
编码环境下也可以正常使用。但是,要注意这些程序处理 UTF-8
数据时
可能会出错。
- 文件系统
当你使用 Unicode
作为文件名或文件夹名称的时候,你经常会遇到麻烦。因为,系统编
码可能不一致,所用的文件访问 API 可能使用不同的编码。你所能做的就是查看相关系统
的文档并不断测试自己的代码,确保文件访问没有问题。
- 国际化域名
当域名使用不同的文字时,尽管使用的是 Unicode
,程序处理也非常复杂。因此,国际化
域名可以使用的字符也有很多限制。DNS 本身不支持超出 ASCII 字符的域名,所以国际化
域名要转换成为 ASCII 字符的域名,这里使用的标准方法是 Punycode
——所有国际化域名
都以 xn--
开头。比如,.中国
就会变成 xn--fiqs8s
。
以上只是列出了使用 Unicode
进行国际化和本地化的常见问题。具体应用还会遇到多得
多的问题,相信其中大多数都在 Unicode
的框架下有了解决方案。编程人员所要做的就
是具体化问题,阅读相关文档,不断测试。坚持使用 Unicode
会让你的软件更容易走向
国际市场。