本地化

本地化是让程序按照地区特定方式运行的行为,如果一个程序的格式、数字或者是日期是你的本地方式,或者是打印的信息(或者是接受的输入)是你本地的语言,这个程序被叫做已经本地化了,这部分描述了针对本地化的Subversion的步骤。

理解地区

许多现代操作系统都有一个“当前地区”的概念—也就是本地化习惯服务的国家和地区。这些习惯—通常是被一些运行配置机制选择—影响程序展现数据的方式,也有接受用户输入的方式。

在类Unix的系统,你可以运行locale命令来检查本地关联的运行配置的选项值:

$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL="C"

输出是一个本地相关的环境变量和它们的值,在这个例子里,所有的变量设置为缺省的C地区,但是用户可以设置这些变量为特定的国家/语言代码组合。举个例子,如果有人设置LC_TIME变量为fr_CA,然后程序会知道使用讲法语的加拿大期望的格式来显示时间和日期信息。如果一个人会设置LC_MESSAGES变量为zh_TW,程序会知道使用繁体中文显示可读信息。如果设置LC_ALL的效果同分别设置所有的位置变量为同一个值有相同的效果。LANG用来作为没有设置地区变量的缺省值,为了查看Unix系统所有的地区列表,运行locale -a命令。

在Windows,地区配置是通过“地区和语言选项”控制面板管理的,可以从已存在的地区查看选择,甚至可以自定义(会是个很讨厌的复杂事情)许多显示格式习惯。

Subversion对地区的支持

Subversion客户端,svn通过两种方式支持当前的地区配置。首先,它会注意LC_MESSAGES的值,然后尝试使用特定的语言打印所有的信息,例如:

$ export LC_MESSAGES=de_DE
$ svn help cat
cat: Ausgabe des Inhaltes der angegebenen Dateien oder URLs
Aufruf: cat ZIEL...
…

这个行为在Unix和Windows上同样工作,注意,尽管有时你的操作系统支持某个地区,Subversion客户端可能不能讲特定的语言。为了制作本地化信息,志愿者可以提供各种语言的翻译。翻译使用GNU gettext包编写,相关的翻译模块使用.mo作为后缀名。举个例子,德国翻译文件为de.mo。翻译文件安装到你的系统的某个位置,在Unix它们会在/usr/share/locale/,而在Windows它们通常会在Subversion安装的\share\locale\目录。一旦安装,一个命名在程序后面的模块会为此提供翻译。举个例子,de.mo会最终安装到/usr/share/locale/de/LC_MESSAGES/subversion.mo,通过查看安装的.mo文件,我们可以看到Subversion支持的语言。

第二种支持地区设置的方式包括svn怎样解释你的输入,版本库使用UTF-8保存了所有的路径,文件名和日志信息。在这种情况下,版本库是国际化的—也就是版本库准备接受任何人类的语言。这意味着,无论如何Subversion客户端要负责发送UTF-8的文件名和日志信息到版本库,为此,必须将数据从本地位置转化为UTF-8。

举个例子,你创建了一个文件叫做caffè.txt,然后提交了这个文件,你写的日志信息是“Adesso il caffè è più forte”,文件名和日志信息都包含非ASCII字符,但是因为你的位置设置为it_IT,Subversion知道把它们作为意大利语解释,在发送到版本库之前,它用一个意大利字符集转化数据为UTF-8。

注意当版本库要求UTF-8文件名和日志信息时,它不会注意到文件的内容,Subversion会把文件内容看作字节串,没有任何客户端和服务器会尝试理解或是编码这些内容。