This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.
本地化 (localization) 指 的是让程序按照某个地区特有的方式进行运转的行为. 如果程序按照你所习惯的 方式来格式化数字或日期, 或者使用你的母语来输入 (或输出) 消息, 那我们就 说该程序是 本地化的 (localized). 本节介绍 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 客户端可以说哪些语言.
Subversion 支持本地化的第二种方式涉及到 svn 如何 解释用户的输入. 仓库使用 UTF-8 编码记录所有的路径, 文件名和日志消息. 在这种情况下, 我们可以说仓库是 国际化的 (internationalized)—也就是说仓库已经准备 好接受任意一种人类语言. Subversion 客户端必须负责只向仓库发送 UTF-8 编码的文件名和日志消息, 所以它必须将本地字符编码的数据转化成 UTF-8 编码.
例如, 你创建了一个文件 caffè.txt
, 然后在提交
时把日志消息写成了 “Adesso il caffè è più forte.” 文件名和
日志消息都包含了非 ASCII 字符, 由于你把本地语言设置成了
it_IT
, 所以 Subversion 客户端知道它们是意大利文,
然后它使用意大利字符集把文件名和日志消息转换成 UTF-8 编码, 再发送给
仓库.
注意, 虽然仓库要求文件名和日志消息必须是 UTF-8 编码, 但它并不在乎 文件的内容是什么编码, Subversion 把文件的内容看成是不透明的字节串, 服务器端和客户端都不会试图去理解文件内容的字符集或编码方案.