### 本地化
*本地化*是讓程序按照地區特定方式運行的行為,如果一個程序的格式、數字或者是日期是你的本地方式,或者是打印的信息(或者是接受的輸入)是你本地的語言,這個程序被叫做已經*本地化了*,這部分描述了針對本地化的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會把文件內容看作字節串,沒有任何客戶端和服務器會嘗試理解或是編碼這些內容。
**字符集轉換錯誤**
當使用Subversion,你或許會碰到一個字符集轉化關聯的錯誤:
~~~
svn: Can't recode string.
~~~
這個信息是神秘的,但是通常會發生在Subversion客戶端從版本庫接收到一個UTF-8串,但是字符不能轉化為當前的地區文字,舉個例子,如果你的地區設置是`en_US`,但是一個寫作者使用日本文件名提交,你會在**svn update**接受文件時會看到這個錯誤。
解決方案或者是設置你的地區為*可以*表示即將到來的UTF-8數據,或者是修改版本庫的文件名或信息。(不要忘記和你的合作者拍拍手―項目必須首先決定通用的語言,這樣所有的參與者會使用相同的地區設置。)
- 第1章介紹
- Subversion的歷史
- Subversion的特性
- Subversion的架構
- 安裝Subversion
- Subversion的組件
- 快速入門
- 第2章基本概念
- 版本模型
- Subversion實戰
- 摘要
- 第3章指導教程
- 導入
- 修訂版本: 號碼、關鍵字和日期,噢,我的!
- 初始化的Checkout
- 基本的工作周期
- 檢驗歷史
- 其他有用的命令
- 摘要
- 第4章分支與合并
- 使用分支
- 在分支間拷貝修改
- 常見用例
- 轉換工作拷貝
- 標簽
- 分支維護
- 摘要
- 第5章版本庫管理
- 版本庫的創建和配置
- 版本庫維護
- 添加項目
- 摘要
- 第6章配置服務器
- 網絡模型
- svnserve,一個自定義的服務器
- httpd,Apache的HTTP服務器
- 支持多種版本庫訪問方法
- 第7章高級主題
- 屬性
- Peg和實施修訂版本
- 外部定義
- 賣主分支
- 本地化
- Subversion版本庫URL
- 第8章開發者信息
- 使用API
- 進入工作拷貝的管理區
- WebDAV
- 使用內存池編程
- 為Subversion做貢獻
- 第9章Subversion完全參考
- svn add
- svn blame
- svn cat
- svn checkout
- svn cleanup
- svn commit
- svn copy
- svn delete
- svn diff
- svn export
- svn help
- svn import
- svn info
- svn list
- svn log
- svn merge
- svn mkdir
- svn move
- svn propdel
- svn propedit
- svn propget
- svn proplist
- svn propset
- svn resolved
- svn revert
- svn status
- svn switch
- svn update
- svnadmin
- svnadmin create
- svnadmin deltify
- svnadmin dump
- svnadmin help
- svnadmin hotcopy
- svnadmin list-dblogs
- svnadmin list-unused-dblogs
- svnadmin load
- svnadmin lstxns
- svnadmin recover
- svnadmin rmtxns
- svnadmin setlog
- svnadmin verify
- svnlook
- svnlook author
- svnlook cat
- svnlook changed
- svnlook date
- svnlook diff
- svnlook dirs-changed
- svnlook help
- svnlook history
- svnlook info
- svnlook log
- svnlook propget
- svnlook proplist
- svnlook tree
- svnlook uuid
- svnlook youngest
- svnserve
- svnversion
- mod_dav_svn Configuration Directives
- 附錄A.Subversion對于CVS用戶
- 目錄的版本
- 更多離線操作
- 區分狀態和更新
- 分支和標簽
- 元數據屬性
- 沖突解決
- 二進制文件和轉化
- 版本化的模塊
- 認證
- 轉化CVS版本庫到Subversion
- 附錄C.WebDAV和自動版本化
- 自動版本化交互性
- Subversion和DeltaV
- 術語表