此文本正在进行中,可能会随时更改,并且可能无法准确描述 Apache™ Subversion® 软件的任何发布版本。将此页面添加为书签或以其他方式向他人推荐此页面可能不是一个明智的选择。请访问 https://svnbook.subversion.org.cn/ 获取本书的稳定版本。
本地化是指使程序以特定区域的方式运行。当程序以特定于您所在地区的方式格式化数字或日期,或以您的母语打印消息(或接受输入)时,该程序就被认为是 本地化的。本节介绍 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 客户端 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 如何解释您的输入。存储库将所有路径、文件名和日志消息存储在 Unicode 中,以 UTF-8 编码。从这个意义上说,存储库是 国际化的,即存储库已准备好接受任何人类语言的输入。这意味着,Subversion 客户端负责仅将 UTF-8 文件名和日志消息发送到存储库。为此,它必须将数据从本地语言环境转换为 UTF-8。
例如,假设您创建一个名为 caffè.txt
的文件,然后在提交文件时,您将日志消息写为 “Adesso il caffè è più forte.” 文件名和日志消息都包含非 ASCII 字符,但由于您的语言环境设置为 it_IT
,因此 Subversion 客户端知道将它们解释为意大利语。它使用意大利字符集将数据转换为 UTF-8,然后将其发送到存储库。
请注意,虽然存储库要求使用 UTF-8 文件名和日志消息,但它 不 关注文件内容。Subversion 将文件内容视为不透明的字节字符串,客户端和服务器都不会尝试理解内容的字符集或编码。