本手册旨在描述 Apache™ Subversion® 的 1.7.x 系列。如果您运行的是其他版本的 Subversion,强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适合您 Subversion 版本的手册。

本地化

本地化是指使程序以特定区域的方式运行。当程序以特定于您所在地区的方式格式化数字或日期,或以您的母语打印消息(或接受输入)时,该程序就被认为是本地化的。本节描述了 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: Gibt den Inhalt der angegebenen Dateien oder URLs aus.
Aufruf: cat ZIEL[@REV]...
…

这种行为在 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 编码的 Unicode 存储所有路径、文件名和日志消息。从这个意义上说,仓库是 国际化的,也就是说,仓库可以接受任何人类语言的输入。然而,这意味着 Subversion 客户端负责仅将 UTF-8 文件名和日志消息发送到仓库。为此,它必须将数据从本地区域设置转换为 UTF-8。

例如,假设您创建了一个名为 caffè.txt 的文件,然后在提交该文件时,您编写了日志消息 Adesso il caffè è più forte. 文件名和日志消息都包含非 ASCII 字符,但由于您的区域设置设置为 it_IT,Subversion 客户端知道将它们解释为意大利语。它使用意大利语字符集将数据转换为 UTF-8,然后再将其发送到仓库。

请注意,虽然仓库要求使用 UTF-8 编码的文件名和日志消息,但它关注文件内容。Subversion 将文件内容视为不透明的字节串,客户端和服务器都不会尝试理解内容的字符集或编码。