LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2123|回复: 12

Chapter 1. 前言

[复制链接]
发表于 2003-7-2 07:31:13 | 显示全部楼层 |阅读模式
Table of Contents
1.1. 簡介
1.2. 如何取得這份文件?
1.3. 注意事項
1.4. 目標
1.5. 如何學 BSD?

這份文件大部分都不是作者親自撰寫的, 由網路上大家所努力出?淼某晒L集為主, 雖然有想過要轉型成為 "FreeBSD 中文使用環境" 簡介文件, 不過礙於作者本身的能力與時間的不足,所以還在慢慢規?中。

關於 FreeBSD 可以先參考它的官方網站 http://www.freebsd.org ,以及他所提供的豐富文件,目前較為建議的閱讀是 FreeBSD Handbook。

本文目前適合給已經有安裝 FreeBSD 概念,但遇到中文相關問題時, 可以用?碚屹Y料的文件,初學者可能要先閱讀過基本的文章後, 例如 FreeBSD Handbook,也有 FreeBSD Ports Collection 的使用概念後,會更為適合閱讀此份文件。 在閱讀此份文件時,目前還沒辦法一步步的引導使用者去設立 FreeBSD 中文使用環境,不過這將是我們未?淼哪繕恕
1.1. 簡介

本文件雖已力求正確,然而無法保證所有操作/設定範例, 都可以順利的在您的系統上面進行。 如果您依照本文件的說明而使您的系統發生任何問題或損失, 作者都將不負任何責任。

希望由於本文的出現,能大量減少在網路上一再重複出現的問題:"為 什麼我不能輸入/看到中文?","為什麼我 xxxx 裝不起??" 等等。 雖然我也了解這是不太可能的...
Prev         Home         Next
FreeBSD Chinese HOWTO                   如何取得這份文件?
 楼主| 发表于 2003-7-2 07:32:00 | 显示全部楼层

注意事項

本文中範例的使用以 sh/ bash 為主。若您使用的是 csh/tcsh  ,請注意其中的差?。例如對環境變數的設定,在 sh/bash  中是

% export TERM=vt100

在 csh/ tcsh 中則是

% setenv TERM vt100
 楼主| 发表于 2003-7-2 07:33:36 | 显示全部楼层

保持最新的 Ports Tree

last update: 2003年 1月27日 周一 04時50分10秒 CST

Contributed by Gea-Suan Lin <gslin@ccca.nctu.edu.tw>

在安裝軟體前,最好先更新 Ports Tree, 建議先由安裝光碟中選擇 Ports Collection 先安裝好後, 再?砀 Ports Tree,這樣子更新的時間會比較短。

接著設定好 /etc/make.conf (若沒有則自行建立)。

SUP_UPDATE=     yes
SUP=            /usr/local/bin/cvsup
SUPFLAGS=       -g -L 2
#
# SUPHOST 代表要到哪台 CVSup,請改成離您比較近的 Server。
# cvsup[1-9].tw.FreeBSD.org
SUPHOST=        cvsup.tw.FreeBSD.org
#
# 如果您是用 -stable,請用 stable-supfile (目前的 -stable 是 4.3)
# 如果您是用 -current,請用 standard-supfile (目前的 -current 是 5.0)
SUPFILE=        /usr/share/examples/cvsup/stable-supfile
PORTSSUPFILE=   /usr/share/examples/cvsup/ports-supfile
DOCSUPFILE=     /usr/share/examples/cvsup/doc-supfile
# 國內主要的 FreeBSD distfiles mirror 站台
MASTER_SITE_BACKUP?=    \
        ftp://ftp.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
        ftp://ftp2.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
        ftp://ftp3.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
        ftp://ftp4.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
        ftp://ftp5.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
        ftp://ftp7.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
        ftp://ftp8.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
        ftp://ftp9.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?=  ${MASTER_SITE_BACKUP}
# 在此我是安裝 XFree86-4
XFREE86_VERSION=        4

    Note: 可以安裝 sysutils/fastest_cvsup ?頇z察那一個 cvsup 最適合你,安裝完後修改 /usr/local/bin/fastest_cvsup, 把台灣的個數 'tw' => 3, # Taiwan 改成 'tw' => 13, # Taiwan, 然後執行 fastest_cvsup -c tw。

安裝好基本的 Ports Tree 後,安裝 cvsup-without-gui:

# cd /usr/ports/net/cvsup-without-gui
# make install clean

接著就可以進行更新了:

# cd /usr/ports
# make update
 楼主| 发表于 2003-7-2 07:39:07 | 显示全部楼层

中文環境

FreeBSD Chinese HOWTO
Prev                 Next
Chapter 3. 中文環境

Table of Contents
3.1. 中文編碼標準
3.2. 基本中文環境的要件
3.3. 國際化與中文化
3.4. 可能的問題
3.5. 什麼是 locale ?

3.1. 中文編碼標準

在電腦開始使用的時候,所有的字都只用 1byte ?韮Υ妫 1byte 包含 8bits,每個 bits 都只能表示 on/off, 也就是 1byte 只能表示 0000 0000 到 1111 1111 的編碼範圍, 只有 256 個編碼空間,這對中文而言,是不夠的。

我們知道中文字在目前常見的電腦上是由兩個位元組(two bytes) 所編碼組成的。 最常見的編碼方式有台灣地區所通行的 Big5 編碼,及大陸地區所使用的 GB 編碼。而且開頭的位元組幾乎都是大於 128 的數值,也就是所謂 non-ASCII 碼的範圍(ASCII 是指小於 128 的編碼)。

字集(Character Set)是一組符號或文字的組合, 而編碼(Encoding)則是將這一組符號或文字以適當的方式編入位元組中, 以便電腦能夠表示與儲存。 目前現有的字集如中文字集、英文字集、日文字集等, 而中文編碼則是選取部份或全部字集中的部分或全部字, 給予一個號碼,如Big5 包含部分中文字集、英文字集、部分日文字集等。

接下?砭褪侨f碼奔騰,眾多中文編碼標準的問題, 目前台灣使用的中文編碼存在許多問題,第一是中文編碼有數種 Big5、CCCII、CNS11643、Big5E、Big5+、ISO 10646、CP950, 每個編碼所包含的中文字數不同,編碼方式也不相同, 而且大部分都沒有標準規格, 第二是常用的 Big5 編碼字數不足。

雖然常用的 Big5 已經使用 2bytes ?肀硎局形淖郑 2bytes = 16bits = 2^16 = 65536 個編碼空間, 以 Big5 的標準而言,為了要和 ASCII 能夠相容,只能使用兩萬多字, 現存的中文字最少在七萬以上,造成許多字在 Big5 的系統下, 無法使用。在加上中文標準繁多,卻又沒有最後的標準規格, 各家?S商所?做產品也就未必相容。 最明顯的例子就是日文平假片假名, 在這些中文編碼中?K不是每個都包含, 當遇到所謂的「Big5日文」時,就會產生許多問題。
3.1.1. Big Five

如不去考慮特殊符號,及後?淼钠邆擴充字, TW-BIG5 的排序方式如下:

    *

      將所有的字分成兩大群: 常用字區與次常用字區
    *

      每一個字區分別用筆畫?砼判
    *

      同一個筆畫的字,依部首?砼

TW-BIG5 每個字由兩個位元組組成,其第一位元組編碼範圍為 0xA1 ... 0xF9, 第二位元組編碼範圍為 0x40 ... 0x7E 與 0xA1 ... 0xFE,總計收入 13868 個字 (包括 5401 個常用字、7652 個次常用字、7 個擴充字、以及 808 個各式符號),其中可以大致?分為以下幾個字區:

Table 3-1. TW-BIG5 字區與編碼範圍
第一位元組         第二位元組         字區         制定
A1..A2         40..7E, A1..FE         各種符號區         1984
A3         40..7E, A1..BF         各種符號區 (包括標點符號、ASCII 全形符號、注音符號等)         1984
A3         E1         歐元符號         CP950
A4..C5         40..7E, A1..FE         常用字區         1984
C6         40..7E         常用字區         1984
C6         A1..FE         罕用符號區         倚天
C7         40..7E, A1..FE         罕用符號區 (包括日文、俄文等)         倚天
C8         40..7E, A1..D3         罕用符號區 (包括俄文、輸入法特殊符號等)         倚天
C9..F8         40..7E, A1..FE         次常用字區         1984
F9         40..7E, A1..D5         次常用字區         1984
F9         D6..DC         七個擴充字         倚天
F9         DD..FE         表格符號區         倚天

Table 3-2. 七個擴充字
擴充字         BIG5 碼         Unicode 碼         BIG5_1984 的同義字
碁         0xF9D6         0x88CF         棋
銹         0xF9D7         0x92B9         鏽
裏         0xF9D8         0x7CA7         裡
墻         0xF9D9         0x58BB         ?
恒         0xF9DA         0x6052         ?a
粧         0xF9DB         0x7881         妝
嫺         0xF9DC         0x5AFA         嫻
3.1.2. CNS11643

CNS11643 中文標準交換碼, 一般簡稱 CNS 碼或 CNS11643 , 因中央標準局 公?鸭靶抻喼柔岫卸版本,一般稱為 CNS11643-1986 版(1986公告版)及 CNS11643-1992 版(1992年修訂版), 此二個版本之差?僅在於其所編定之字數不同。 75 年公告之 CNS11643 定義 13,051個?h字,81 年修訂版擴編為48,027 個?h字。 75 年公告之 CNS11643 名稱為「通用?h字標準交換碼」,於 81 年擴充後修訂 CNS11643 名稱為「中文標準交換碼」。

兩個電腦系統要交換資料時,以兩方皆認可之碼傳輸, 此稱為交換碼,交換碼之設計須符合國際標準。 因此一般在電腦內部處理時使用內碼,而在傳輸時, 再轉換為標準交換碼。

WWW: http://www.cns11643.gov.tw/
3.1.3. GB

在中國,中文信息編碼由政府負責制定?K監督?施。 這是為了保證對於所有的系統中文的編碼都是一致的,能夠互相進行操作。 ?挠嬎銠C的應用開始,已經頒布了多種中文信息編碼標準, 常用的是 GB2312-1980,GB12345,GB13000(GBK),以及最新標準 18030。 值得一提的是,最新的 GB18030 標準將要作為?娭茦藴蕦?行,所有不支持 GB18030 標準的軟體將不能作為產品的出售。

? GB2312-1980 編碼開始,?h字都是採用雙字?編碼。 為了與系統中基本的 ASCII 字符集區分開, 所有?h字編碼的每個字?的第一位元都是1。例如:"啊" 字的編碼為 0xB0A1。

Table 3-3. GB 的?h字編碼規則
編碼         第一個字?         第二個字?         第三個字?         第四個字?
GB2312         0xB0 - 0xF7         0xA0 - 0xFE                    
GBK         0x81 - 0xFE         0x40 - 0xFE                    
GB18030 的雙字?         0x81 - 0xFE         0x40 - 0x7E, 0x80 - 0xFE                    
GB18030 的四字?         0x81 - 0xFE         0x30 - 0x39         0x81 - 0xFE         0x30 - 0x39
3.1.4. Unicode/ISO 10646

Unicode (Universal Multiple Octet Coded Character Set), Unicode 國際標準組織於1984年4月成立 IOS / IEC JTC1 / SC2 / WG2工作組,針對各國文字、 符號進行統一性編碼,1991年美國跨國公司成立Unicode Consortium, ?K於1991年10月與WG2達成協議,採用同一編碼字集 。 目前Unicode是採用16 bit之編碼架構,其字集內容與ISO 10646之 BMP(Basic Multilingual Plane)相同。

Unicode (Unicode Consortium)?K於1992年6月通過 DIS(Draft International Standard),目前版本為Unicode v2.0 於1996年公?眩 內容包含符號6811、 ?h字20902、韓文拼音11172、 造字區6400,保留20249共65534個碼位 。

目前碼位空間為 U+0000 到 U+10FFFF,共有 1,114,112 個空間。

Unihan3.2 包含超過七萬個 CJK 字。

ISO 10646 HK WWW: http://www.iso10646hk.net/

WWW: http://www.unicode.org/
Prev         Home         Next
中文環境         Up         基本中文環境的要件
 楼主| 发表于 2003-7-2 07:39:56 | 显示全部楼层

基本中文環境的要件

先讓我們一起?硐胍幌耄 一個基礎中文平台要能夠做到那些事情, 不妨就以編輯一份文件為例吧(像我現在在這邊寫稿一樣), 我們希望開啟的程式可以有友善的介面,有中文的選單跟說明(中文?息), 還要有慣用的中文輸入法可以把中文打進去(輸入), 打字進去以後必須可以看到輸入的結果(顯示), 打字出錯了還要可以修改才行,必要的時後還得可以改變字型等等的(處理), 文章打完了,要能夠順利的把結果印出?(列印); ?倪@一個例子裡面我們就可以歸納出一個基本中文環境, 應該要可以做到下面這幾件事情:

    *

      中文的?息
    *

      中文的顯示
    *

      中文的輸入
    *

      中文的列印
    *

      中文的處理

上面的列表就是我們認為一個基本中文環境所要?M足的要件, 也是我們在評估一個系統中文支援優劣時所用的基準, 其?所謂的"中文化",代表的就是在作為基礎的英文版作業系統上面, 做出修正的工作,目的不外是要能夠?M足上面所提到的這些要件罷了, 這個列表的順序剛好是依照程式設計加以支援的困難程度排出?淼模 順序是?暮唵蔚嚼щy;提供中文的?息跟介面所牽涉到的大多只是翻譯的工作, 最為簡單,在顯示時要考慮到字型的搭配問題, 在輸入時要有一個程式之間共用的輸入介面,這些就比較困難, 而列印不只要作到應用程式跟列印伺服程式之間的整合, 還需要有產生大點數美觀字體的能力,這件工作牽涉的問題更加複雜了, 這幾點裡面要讓應用程式處理中文是最困難的一部分, 例如中文正規表示法、中文字串搜尋等等,都是目前還難以解決的課題。

那麼,在目前的 FreeBSD 環境底下, 要用甚麼方法才可以讓系統支援上面提到的這些基本要件呢?
Prev         Home         Next
中文環境         Up         國際化與中文化
 楼主| 发表于 2003-7-2 07:40:43 | 显示全部楼层

國際化與中文化

要讓系統支援中文,可能的解決方案不出三種, 一是使用外掛式的中文系統,二是撰寫獨立的中文程式, 三是利用系統上提供的國際化架構?碇гK^的外掛式中文環境, 指的是如同 DOS 底下的倚天中文或者 Windows 底下的雙橋中文這樣的系統, 在 FreeBSD 系統底下,外掛式的中文環境可以藉著 LD_PRELOAD 的機制?磉_成,只要設定 LD_PRELOAD 這個環境變數, 適時的指到提供中文支援的動態函式庫去,就可以在程式執行時, 動態的用支援中文的函式?硖鎿Q掉原本不支援中文的函式, 結果就可以讓不支援中文的程式變得可以顯示中文跟接受中文輸入了, 例如 xa+cv 或者是在 TurboLinux 裡面使用的 zhWinPro 都是屬於這?的程式。 利用這種方式?硖峁┲形牡闹г芎唵危莒`活, 也不需要去修改程式的原始碼?K重新編譯, 可是這個方法卻沒辦法讓應用程式對中文作正確的"處理", 常見的例子是雖然加上了外掛的中文系統, 可是編輯文字時在中文字上面按一次刪除鍵卻還是只能刪除半個中文, 這是因為在應用程式內部仍然是把一個中文字當成兩個英文字?砜创 而這顯然是不正確的,此外這個方式也不支援跟函式庫作靜態連結的程式, 還控會造成系統的不穩定,因此大家已經理解到這個方式無法解決根本問題, ?u?u的捨棄這種外掛的方式,而用其他的方法提供中文支援了。

第二種方式是修改程式,直接讓每個程式都支援中文的使用, 這種是最簡單也是最困難的方法,說它簡單,因為這件工作很直接, FreeBSD 底下的程式又大多數都可以拿到程式的原始碼, 只要對這些原始碼作修正,加入支援中文的部份,就可以支援中文的使用囉, 例如很多人使用的中文 cpine 郵件程式就是用英文版 pine 的原始碼改出?淼模 其他如 cxterm 程式或者支援多種語言的 emacs 等等程式都是由應用程式自行提供中文支援的, 這些程式對中文的支援很好,也都受到了大家的歡迎?塾茫墒牵 使用者一旦離開這些有提供中文支援的程式以後就無法用中文了, 一個 FreeBSD 套件少說有五六百個程式套件, 想要全面的中文化,必須要一個一個完整的對這些程式做出修改才行, 這件工作在人力跟物力上都會是一個天文數字的投資,是不可能的事情, 所以我們前面說這也是最困難的方法 況且,因為編碼系統不一樣, 這些程式拿到日本就要改一次日文版,拿到韓國也要再改一次韓文版, 這種作法會使得資源重複浪費的部份十分嚴重,由此可見, 靠獨立的程式?硖峁┲形沫h境?K不是個聰明的作法, 必須要有更好的方式才行。

那麼甚麼才是這個更好的方式呢? "國際化"可能是目前我們找得到的最好解答, 國際化的英文名稱是 InternationalizatioN,這個英文單字的第一個字母 I 與最後一個字母 N 之間有 18 個字母,所以也被簡稱為 I18N。 I18N 是一種觀念跟目標,這個想法是要提供一個架構, 讓同樣的程式碼可以適用在各種語文習慣跟編碼系統上面, 程式設計人員只要利用這個架構的機制跟準則撰寫應用程式, 就可以在不需重新編譯程式的情況下,自然的支援各式各樣的語言, 不過為了要達成這樣的目標,作業系統必須提供一定程度的支援, 特別是在各種的程式庫裡面都得有支援 I18N 的 設計才可以, 這邊特別重要的就屬 C 程式庫以及 X 視窗系統的國際化設計了。 過去,FreeBSD 上的 C 程式庫跟 X 對國際化的支援都不完整, 整個基礎環境還不成熟,所以多數的程式?K沒有照著 I18N 的標準?碜珜懀 導致中文化的問題困難重重,這個現象在這一年?硪呀浻辛舜蠓母纳疲 目前國際上大家寫程式的時候已經有支援 I18N 的普遍共識了, 主流的程式也都?u?u提供了 I18N 的支援,利用標準的 FreeBSD 國際化架構?碇г形倪是要改程式,不過這個改法是國際的主流, 也可以保證投資可以有最大的獲益,所以我們認為這才是建構中文環境的正途, 在後續的文章裡面我們將會一一跟大家介紹目前 FreeBSD 底下 I18N 環境的?作方法,以及設計 I18N 程式所該注意的事項。

一般國際化架構設計的基本原則, 是把程式處理會跟語文編碼相關的部份獨立出?恚 這些資料不只是編碼系統的定義,還包括該語文下的一些使用習慣, 例如數字、日期、排序、貨幣的格式,以及翻譯的?息等等... 這些跟語文環境有相關的資料,我們稱之為 "區域環境資料庫" (locale database,LOCALization Environment database), 把這些資料分離出?硪葬幔涂梢远x一個跟語文編碼無關的介面, 給程式設計師使用,讓程式設計人員在設計程式時不必考慮, 對特定語文環境提供支援的細腹A寫出?淼某淌骄涂梢圆幌揿吨г囟ㄕZ言, 而是在程式執行的時候才依使用者的選擇的區域環境 (locale) 聯繫到不同的資料庫,進而提供該語文的支援。

I18N 只是提供可能用?碇г形牡拇蠹軜嫞軌蚴褂弥形模 還必須要在這個架構裡面加入對中文語文編碼的支援才可以, 這個在國際化架構之下加入對某種特定語文支援的動作稱為"區域化", 英文稱為 LocalizatioN,因為 L 跟 N 之間有 10 個英文字母, 也常被簡稱為 L10N,一般的 "中文化" 是泛指為應用程式加上中文支援的過程,不過我們這邊提到的中文化, 事?上就是在國際化架構下面加入中文區域化支援的工作; 就目前的FreeBSD 環境而言, 當前在 FreeBSD 上用?硖峁┲形闹г膰H化架構可說是已經大致完備, 底層程式庫的中文區域化工作也都大致完成了, 在這個架構之上已經可以提供一個不錯的中文環境可以用了,說起?恚 我們能有今日的中文環境可用,?在要感謝這些國際性程式開發組織(XFree86) 有心重視?喼拚Z系使用者的需求,此外, 長久以?碓S許多多網路上自由軟體作者的貢獻也是功不可沒, 正就是因為有這許多前人不計個人報酬的努力, 我們才能享受當前的中文環境。
Prev         Home         Next
基本中文環境的要件         Up         可能的問題
 楼主| 发表于 2003-7-2 07:41:37 | 显示全部楼层

可能的問題

許多程式由於各式各樣的原因, ?K未考慮到輸入的資料可能是 non-ASCII 碼的問題。 它往往假設了它所要處理的資料都是 ASCII 碼,更糟糕的是,當它遇到 non-ASCII 碼時,常常假設它不存在,而將它的第八個位元截去! 這是所謂的 8-bit clean 問題。

例如,您的 telnet 程式 總是認為您輸入的都是七位元的 ASCII 碼。當您輸入中文時, 每每將第八位元砍掉,所以都變成?y碼。

網路上的通?程式也常常只能傳輸七位元的資料。較早期的 sendmail 程式就是?好颜玫睦印 sendmail 只能接送含七位元的信件, 導致我們在傳送中文信件時,必須採用各式各樣奇怪的 編碼格式 (如 uuencode,base64,QP 等),這往往又為收信者帶?砗艽蟮睦_! (我常在想如果當初電子郵件的創造者能多一點點的遠見, 我們今天就會少許多的問題!)

在網路上這個問題顯得更為複雜。 即使您和您的收信人的機器都已經安裝了可以處理中文信件的 sendmail 程式 ,對方仍有可能收到?y碼信件。 因為這封信在到達對方手中前可能經過好多部主機, 如果其中一部機器的 sendmail 將第八位元截去,事情就完了! 對於 client/server 架構的程式,問題可能出在 client 端, 也可能是在 server 端,或是雙方都有。

除了無法處理 non-ASCII 碼資料的問題之外, 應用程式無法辨識中文編碼也是一大問題。也就是,很多程式 (即使能正確處理八位元的資料)都將一個中文字視為兩個獨立的位元組。 這在許多情況下不會有什麼不好,但在某些場合下就顯得很糟!

最顯然的例子,即使您能正確的輸入中文,可是當您按下倒退鍵 (backspace)時,往往只倒後了一個位元組而將一個好好的中文字截成兩半, 剩下的那半當然就成了?y碼。還有, 文書編輯器可能在一個中文字中間換行而導致出現?y碼, 或是將一行很長的中文句子當作一個很長的英文字母而不換行, 使得畫面變得很難看。

還有更糟的!某些中文字所含的特殊內碼對某些應用程式具有特別的意義, 這導致程式遇到這些內碼時將產生嚴重的錯誤,或是當掉。

下面將試著為這些問題提出一些解決之道,但是這仍是片面的, 不完全的,而且不能令人?M意。 也許只有當所有的軟體都能為中文量身打造時問題才可能真正的解決。

話雖如此,愈?碛嗟某淌皆谠O計上已經注意到國際化的問題, 例如現在大部分主機的 sendmail 程式都已經能正確處理 8-bit 的信件 --- 因為不僅僅是傳輸中文信件需要 8-bit, 現在很多的多媒體郵件也都需要用 8-bit 傳送。 很多軟體已經完全不需修改, 或者只要開啟一些特殊的選項,就能使用中文。 同時也有愈?碛嗳苏跒檐涹w的中文化而努力。且讓我們拭目以待。
Prev         Home         Next
國際化與中文化         Up         什麼是 locale ?
 楼主| 发表于 2003-7-2 07:43:03 | 显示全部楼层

什麼是 locale ?

locale 是一組 C 程式語言處理自然語言(文字)的程式介面, 也可以簡單的說,locale 就是一組 [地區性語言] 的資?。 由國家語言和各地習俗影響所決定的慣例,或代表一個地理區域的定義所組成, 這些慣例包含文字、日期、數字、貨幣格式和排序等等。這代表著 locale 可讓程式的輸出可以直接反應地方區域性的文化。C 語言的 locale 定義,分為下列各大?:

    *

      LC_ALL 代表所有的 Locale
    *

      LC_CTYPE 字元定義 (包含字元分?與轉換規則)
    *

      LC_MESSAGES ?息顯示
    *

      LC_TIME 時間格式
    *

      LC_NUMERIC 數字格式
    *

      LC_MONETARY 貨幣格式
    *

      LC_COLLATE 字母順序與特殊字元比較

其中與一般使用者息息相關的,是字元定義 (LC_CTYPE) 與?息顯示 (LC_MESSAGES)。LC_CTYPE 直接關係到某些字元或內碼在目前的 locale 下是否可列印?要如何轉換字碼?對應到哪一個字?.... 等等。LC_MESSAGES 則關係到軟體的?息輸出是不是符合地域性,例如 :我們需要的是中文。而一個真正完整支援 locale 系統, 是當使用者在 shell prompt 下,直接設好環境變數後, 則馬上就能切換到那個語言了。例如:

% setenv LC_CTYPE zh_TW.Big5

locale 命名規則:語言_地區名.字元編碼名稱

設定 Locale 的字元定義為台灣地區的 Big5 繁體中文碼定義, 有了正確的 locale 的定義後,使得任何地區的語文,只要在加入適當的 locale data 之後,C Library 就能正確地處理軟體顯示?息, 而我們使用的 [中文] 當然也不例外,而目前中文使用的 locale data 就是 zh_TW.Big5,代表的就是中文語系(zh)台灣地區(TW) 使用Big5編碼系統(Big5)。
Prev         Home         Next
可能的問題         Up         中文 X Window
 楼主| 发表于 2003-7-2 07:43:55 | 显示全部楼层

中文 X Windo

Table of Contents
4.1. XFree86-4
4.2. 使用字型
4.3. 中文 locale 的設定
4.4. 時區的設定

X Window 系統是 UNIX 下?姸辛Φ膱D形環境。XFree86 由 MIT X Window 系統 X11R6 改版而?恚敲赓M的。

完整中文化 X Window System

    *

      中文的?息:由 locale messages 解決
    *

      中文的顯示:由 I18N 解決
    *

      中文的輸入:由 xcin 解決
    *

      中文的列印:由 gscjk 解決
    *

      中文的處理:由系統底層的 C Library(libc) 與 X Library 的 locale 環境與 I18N 標準以及軟體的配合解決

建立 I18N 的環境

    *

      安裝中文字型
    *

      設定 Shell locale 環境
    *

      安裝 XIM 中文輸入程式

基本上只要安裝完 X Window 後,再安裝中文字型, 這樣子就可以看到 X Window 的中文了,而再安裝 xcin2.5 就可以輸入中文, 剩下的就選自己所偏好的軟體?戆惭b囉。
4.1. XFree86-4

x11/XFree86-4 的安裝:

# cd /usr/ports/x11/XFree86-4
# make install

先用 XFree86 -configure 產生 XF86Config.new,然後用 XFree86 -xf86config XF86Config.new ?頊y試這個檔案能不能正常的運作,如果可以的話,就 mv XF86Config.new /etc/X11/XF86config, 然後依照以下的方式繼續做下去。

# XFree86 -configure
# mv XF86Config.new /etc/XF86Config

由於筆者通常使用三鍵滑鼠,所以會設定一下, 接著編輯 /etc/XF86Config, 在 Section "InputDevice" 區段, 加入 Option "ZAxisMapping" "4 5"。

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "rotocol" "MouseSystems"
        Option      "Device" "/dev/sysmouse"
        Option      "ZAxisMapping" "4 5"
EndSection

通常都需要指定 HorizSync 和 VertSync 才能讓解析度設定的高一點, 在 Section "Monitor" 區段, 加入 HorizSync 31.5 - 57.0 與 VertRefresh 50.0 - 100.0。

Section "Monitor"
        Identifier   "Monitor0"
        VendorName   "Monitor Vendor"
        ModelName    "Monitor Model"
        HorizSync    31.5 - 57.0
        VertRefresh  50.0 - 100.0
EndSection

我通常都用 16bpp 和 1024x768 的螢幕, 在 Section "Screen" 區段, 加入 DefaultDepth 16,?K在 SubSection "Display" 中, Depth 16 的地方加上 Modes "1024x768"。

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"  
        Monitor    "Monitor0"
        DefaultDepth    16   
        SubSection "Display"
                Depth     16
                Modes     "1024x768"
        EndSubSection
EndSection

WWW: http://www.xfree86.org/
Prev         Home         Next
什麼是 locale ?         Up         使用字型
 楼主| 发表于 2003-7-2 07:45:08 | 显示全部楼层

使用字型

要在 X 底下看中文,就必須先設定好你要的字型, 目前 X 取用字型主要有兩種方式, 一種是傳統的 XLFD,利用 X 內建的 freetype 模組或是 xtt 模組?碜x取字型, 或是直接取用 Font Server 的字型, 另一種則是目前流行的 fontconfig。

通常筆者都會同時設定這兩種字型取用的方式, 雖然 fontconfig 在 KDE3 與 GNOME2 ?V泛的被使用, 但是仍然有許多軟體只支援 XLFD 的取用方式, 兩者都加以設定可以避免許多問題, 如果確定您所使用的所有軟體都支援 fontconfig, 那麼只設定 fontconfig 也是可以的。

WWW: Fonts in XFree86
4.2.1. XLFD, fontset

last update: 2003年 1月20日 周一 10時25分06秒 CST

-kc-fixed-medium-r-normal-*-16-160-72-72-c-160-big5-0
-?S商名稱-字體種?-字體粗細度-字體傾斜度-字體寬度-附加型式-像素大小-點數大小-水平解析度-垂直解析度-字距-平均寬度-字型集

?S商名稱(Foundry):提供該字型的?S商名稱,如 Arphic(文鼎)、kc(國喬)。

字型種?(Family):該字型所屬的?型。

字體粗細度(Weight):字體的粗細程度,如 medium(適中)、bold(粗體)。

字體傾斜度(Slant):字體的傾斜程度,如 r(不傾斜)、o(傾斜)、 i(傾斜?K且具有較奇特變化)。

字體寬度(Setwidth):字體的寬度,如 normal(正常)、condensed(最窄)、 semicondensed(稍窄)。

附加型式(Add Style):字體額外的格式,如 sans(無)、medium(適中)。 目前大部分字體均已不用此欄位。

像素大小(Pixels):用像素?肀硎咀煮w大小。

點數大小(Points):用點數?肀硎咀煮w大小。10 個點數等於 1 個像素。

水平解析度(Resolution X):字體的水平解析度 (每英吋的點數),如 72、75、100。

垂直解析度(Resolution Y):字體的垂直解析度 (每英吋的點數),如 72、75、100。

字距(Spacing):字體的間隔,如 p(依比例大小)、m(固定大小)、 c(以前打字機時代所用的間隔,目前已經少用)。

平均寬度(Average Width):此字體所有字的平均寬度,以點數為單位。

字型集(Character Registry and Charset Encoding):此字體所採用的字型集。如 big5-0、iso8859-1。

WWW: http://www.x-docs.org/XLFD/xlfd.pdf
4.2.2. xtt Module

要使用 xtt Module 必須修改 XF86Config, 幫他加上新的 FontPath,因為 ports 會將中文TrueType安裝到 /usr/X11R6/lib/X11/fonts/TrueType/, 而且把中文PCF 安裝到 /usr/X11R6/lib/X11/fonts/local/:

Section "Files"
        :
        :
        FontPath     "/usr/X11R6/lib/X11/fonts/TrueType/"
        FontPath     "/usr/X11R6/lib/X11/fonts/local/"
EndSection

以及讓 X 去使用 xtt 模組, 如果在模組區發現已經有設定 Load "freetype", 請將該行刪除,因為這兩個模組是互斥的:

Section "Module"
        :
        :
        Load  "xtt"
EndSection

最後再透過 ttfm ?戆惭b新字體就可以了。

是不是一定要 xtt 模組才能使用中文 TrueType?答案不是。 freetype 模組也可以用?硖幚碇形模莾烧咧荒苓x一個, 而 xtt 是專為 CJKV 字型而設計產生的 TrueType 處理模組, 其中 TTCap 選項所提供的功能更是中文 TrueType 所不能或缺的。

對 TTCap 而言,他的語法是擴充 fonts.dir ?硖峁└嗟倪x項,例如:

ds=y:ai=0.3:bsmi00lp.ttf -Arphic-AR PL Mingti2L Big5-bold-i-normal--0-0-0-0-c-0-iso10646-1

最前面的 ds=y:ai=0.3: 就是 X-TT 擴充的部份。 在這個例子中,文鼎明體的名稱是 bsmi00lp.ttf, ds=y(Double Strike) 使用粗體, ai=0.3(Automatic Italic) 使用斜體, 所以相對應的產生 -bold-i- 的文鼎明體粗斜體字型。

常用的還有 fn=INTEGER ?碇付 TrueType Collection(.ttc) 檔案的 face 號碼, 像是目前處理 mingliu 就是跳過固定寬的細明體, 而改採用直接指定變動寬的新系明體 fn=1。

WWW: http://x-tt.sourceforge.jp/
4.2.3. fontconfig

fontconfig 安裝完後的設定檔在 /usr/X11R6/etc/fonts/fonts.conf, 基本上不太會需要改動該檔案,如果要加東西則是另外寫在 /usr/X11R6/etc/fonts/local.conf。

使用 fontconfig 只需要將字型檔拷?到 fonts.conf 所指定的目錄下,通常筆者都會建立 /usr/X11R6/lib/X11/fonts/TrueType, 然後執行 fc-cache -f -v ?斫⒆中唾Y料庫, 也可以用 fc-list ?砣〉靡呀浗⒌馁Y料。

# fc-cache -f -v
      :
      fc-cache: "/usr/X11R6/lib/X11/fonts/TrueType": caching, 8 fonts, 0 dirs
      :
fc-cache: "/root/.fonts": no such directory, skipping
fc-cache: succeeded
# fc-list | grep Big5
AR PL KaitiM Big5:style=Regular
AR PL Mingti2L Big5:style=Reguler

Prev         Home         Next
中文 X Window         Up         中文 locale 的設定
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表