目录
一個應用軟體的 多語言化 (M17N)或本地語言支援,通過 2 個步驟完成。
國際化 (I18N): 使一個軟體能夠處理多個語言環境。
本地化 (L10N):使一個軟體處理一個特定的語言環境。
![]() |
提示 |
---|---|
在 multilingualization(多語言化)、internationalization(國際化)和 localization(本地化)中,有17, 18, 或 10 個字母在"m" 和 "n", "i" 和 "n", 或 "l" 和 "n"中間,它們相應表示為 M17N, I18N 和 L10N. |
GNOME 和 KDE 等現代軟體是多語言的。他們通過處理 UTF-8 資料來實現國際化,並通過 gettext(1) 架構提供翻譯資訊來本地化。翻譯資訊可以由獨立的本地化軟體包來提供。翻譯資訊易於選擇使用,通過給相關的環境變數設定適當的語言環境即可。
最簡單的文字資料表示方法是 ASCII,使用少於 127 個字元 (用 7 位表示),這對英語足夠了。為了支援用於國際化的更多字元,人們發明了許多字元編碼系統。現代知名的編碼系統是 UTF-8,它可以處理人類所知的幾乎所有字元(參見 第 8.4.1 节 “編碼的基礎知識”).
細節請參見 i18n 介紹.
有本地化硬體配置資料便能支援國際化硬體。
![]() |
警告 |
---|---|
本章是基於 2013 年發佈的 Debian 7.0 ( |
Debian 系統可以使用 keyboard-configuration
和
console-setup
軟體包配置多個國際化鍵盤佈局。
# dpkg-reconfigure keyboard-configuration # dpkg-reconfigure console-setup
這將配置 Linux 控制檯和 X 視窗的鍵盤,並更新 “/etc/default/keyboard
” 和
“/etc/default/console-setup
” 中的配置引數。這也可以用來配置 Linux
控制檯的字型。
許多非 ASCII 字元,包括許多歐洲語言使用的重音字元,可以使用 死鍵、AltGr 鍵 和 組合鍵 來輸入它們。
對於亞洲語言,你需要更復雜的輸入法支援,例如下面將要討論的 IBus。
輸入多種語言到應用程式的處理流程如下:
鍵盤 應用程式 | ^ | | +-> Linux 核心 -> 輸入法 -> Gtk、Qt、或 X
通過 im-config
使用 IBus
家族的軟體包可以簡單地為 Debian 系統建立多語種的輸入。下面列出了一些 IBus 軟體包。
表 8.1. IBus 支援的輸入法
軟件包 | 流行度 | 大小 | 支援的語言環境 |
---|---|---|---|
ibus | V:6, I:10 | 42508 | 使用 dbus 的輸入方式框架 |
ibus-mozc | V:1, I:2 | 927 | 日文 |
ibus-anthy | V:1, I:2 | 8450 | 同上 |
ibus-kkc | V:0, I:0 | 205 | 同上 |
ibus-skk | V:0, I:0 | 234 | 同上 |
ibus-pinyin | V:0, I:2 | 1425 | 中文(zh_CN) |
ibus-chewing | V:0, I:0 | 401 | 中文 (zh_TW) |
ibus-hangul | V:0, I:1 | 206 | 韓文 |
ibus-table | V:0, I:1 | 908 | IBus 表引擎 |
ibus-table-thai | I:0 | 45 | 泰文 |
ibus-unikey | V:0, I:0 | 256 | 越南語 |
ibus-m17n | V:0, I:0 | 121 | 多語言:印度語、阿拉伯語和其它 |
kinput2 方式和其它本地獨立的亞洲經典輸入法依舊存在,但不推薦在現代的 UTF-8 X 環境中使用。SCIM 和 uim 工具鏈是用於現代的 UTF-8 X 環境下的國際化輸入法的較舊的方法。
我發現在英語環境("en_US.UTF-8
")下啟動日文輸入法非常有用.
下面是在GNOME3下使用IBus的做法:
安裝日文輸入法軟體包 ibus-anthy
,以及im-config
等推薦的軟體包.
從使用者Shell中執行"im-config
",然後選擇"ibus
"作為輸入法.
選擇 "Settings" → "Keyboard" → "Input Sources" → 在"Input Sources"中單擊
"+
" → "Japanese" → "Japanese (anthy)", 然後單擊"Add".
選擇"日語"並"新增"到支援日語鍵盤,就不需要字元轉換。(你可能會選擇更多的輸入源)
重新登入使用者賬戶。
使用"im-config
"驗證設定.
右鍵單擊 GUI 工具條圖示,設定輸入源。
使用SUPER-SPACE在安裝的輸入法之間進行切換. (SUPER鍵通常是Windows鍵.)
請注意以下幾點。
im-config(8)如果命令是從root賬戶執行的表現會有所不同。
im-config(8) 讓最佳的輸入法作為系統預設而不需要使用者干預。
使用者介面選單入口im-config(8) 預設會被禁用,以免造成混亂。
Linux 控制檯只能顯示有限的字元。(你需要使用特殊的終端程式,例如jfbterm(1),從而在非 X 控制檯中顯示非歐洲語言。)
只要需要的字型檔資料存在X視窗可以通過UTF-8編碼顯示任意字元。(X視窗系統能夠維護好原始字型資料編碼,這對使用者來說是透明的)
在東亞語言環境下,方框繪製、希臘字元和西里爾字元可能會顯示得比你預期的樣子更寬,這樣會導致終端輸出排列不再整齊(參見 Unicode 標準附錄 #11)。
您可以繞過這個問題:
gnome-terminal
:編輯 → 首選項 → 配置檔案 → 編輯 → 相容性 → 寬度有歧義的字元 → 窄
ncurses
:設定環境變數 export
NCURSES_NO_UTF8_ACS=0
。
下面重點介紹在從 gdm3(1) 啟動的 X 視窗環境下執行的應用程式的語言設定。
環境變數 “LANG=xx_YY.ZZZZ
” 將語言環境設定為語言程式碼
“xx
”、國家程式碼 “YY
” 和編碼
“ZZZZ
”(參見 第 1.5.2 节 ““$LANG
”變量”)。
現在的 Debian 系統一般將語言環境設定為 “LANG=xx_YY.UTF-8
”。這將會使用帶有 Unicode 字符集的 UTF-8
編碼。UTF-8 編碼系統是多位元組的程式碼系統並且碼點的使用更加智慧。ASCII 資料(只包含了7位二進位制程式碼)總是合法的 UTF-8 資料(每個字元使用1個位元組)。
之前的 Debian 系統曾經將語言環境設定為 “LANG=C
” 或
“LANG=xx_YY
”(沒有 “.UTF-8
”)。
“LANG=C
” 或 “LANG=POSIX
” 使用 ASCII 字符集。
“LANG=xx_YY
” 使用 Unix 的傳統編碼系統。
“LANG=xx_YY
” 所使用的確切傳統編碼系統可以通過
“/usr/share/i18n/SUPPORTED
”
來確認。例如,“en_US
” 使用 “ISO-8859-1
”
編碼,“fr_FR@euro
” 使用 “ISO-8859-15
” 編碼。
![]() |
提示 |
---|---|
編碼值的含義,參見 表 11.2 “編碼值和用法的列表”。 |
Unicode 字符集可以用從 0 到 10FFFF (十六進位制)範圍的碼點來顯示幾乎所有人類已知的字元。它的儲存至少需要 21 位。
文字編碼系統 UTF-8 將 Unicode 碼點適配到一個合理的 8 位資料流,併兼容 ASCII 資料處理系統。UTF 表示 Unicode 轉換格式(Unicode Transformation Format)。
我建議在你的桌面使用 UTF-8 語言環境,例如
“LANG=zh_CN.UTF-8
”。語言環境的第一部分決定了應用程式中顯示的資訊。例如,“LANG=fr_FR.UTF-8
”
語言環境下的
gedit(1)(GNOME
桌面的文字編輯器),選單是用法語顯示的,但只要安裝所需的字型和輸入法就可以顯示和編輯中文字元文字資料。
我還建議只使用 “$LANG
” 環境變數來設定語言環境。我沒有看到在 UTF-8 語言環境下設定複雜的
“LC_*
” 變數組合有什麼好處(參見
locale(1))。
即使純英文文字也可能包含非 ASCII 字元,例如微微卷曲的左右引號在 ASCII 中是不可用的。
“雙引號的文字” 並非 “雙引號的 ASCII” ‘單引號的文字’ 並非 ‘單引號的 ASCII’
當純 ASCII 文字資料轉換為 UTF-8 後,它會具有與原本完全相同的內容和大小。因此使用 UTF-8 語言環境並不會使你損失什麼。
一些程式在支援 I8N 後會消耗更多的記憶體。這是因為它們為了速度優化,而在內部使用 UTF-32(UCS4) 來支援 Unicode,並且每個獨立於語言環境所選的 ASCII 字元資料都會消耗 4 個位元組。再一次地,使用 UTF-8 語言環境並不會使你損失什麼。
供應商指定的舊的非 UTF-8 編碼系統在一些字元上往往有較小但惱人的不同,例如許多國家使用的字形。而使用了 UTF-8 系統的現代作業系統基本上能解決這行編碼衝突問題。
為了使系統訪問特定的語言環境,必須從語言環境資料庫編譯相應語言環境資料。(Debian 系統不帶有所有提前編譯的可用語言環境,除非你安裝
locales-all
軟體包。)所支援的可編譯語言環境的完整列表位於
“/usr/share/i18n/SUPPORTED
”,它列出了所有準確的語言環境名稱。下列命令列出已編譯成二進位制形式的所有可用的
UTF-8 語言環境。
$ locale -a | grep utf8
下列的命令會重新配置 locales
軟體包。
# dpkg-reconfigure locales
該過程包含 3 個步驟。
更新可用的語言環境列表
將它們編譯為二進位制形式
在 “/etc/default/locale
” 設定系統預設的語言環境值給 PAM 使用(參見 第 4.5 节 “PAM 和 NSS”)
可用的語言環境列表應該包含 “en_US.UTF-8
” 和所有你感興趣的帶有
“UTF-8
” 的語言。
對於美式英語,推薦預設的語言環境為 “en_US.UTF-8
”。對於其它語言,請確保所選的語言環境帶有
“UTF-8
”。這些設定中的任何一個都能夠處理任何國際字元。
![]() |
注意 |
---|---|
雖然將語言環境設定為 “ |
“$LANG
” 環境變數的值由許多應用程式設定和改變。
login(1) 的 PAM 機制為本地 Linux 控制檯程式進行了最初的設定
顯示管理器的 PAM 機制為所有的 X 程式進行了最初的設定
ssh(1) 的 PAM 機制為遠端控制檯程式進行了最初的設定
一些顯示管理器,例如 gdm3(1) 會為所有 X 程式改變設定
通過 “~/.xsessionrc
”,X 會話啟動碼會為所有 X 程式改變設定
shell 啟動碼,例如 “~/.bashrc
”,會為所有控制檯程式改變設定
![]() |
提示 |
---|---|
將系統預設語言環境設定為 “ |
你可以像下面那樣選擇只用於 X 視窗的特定語言環境,而不管你的系統使用 PAM 定製(參見 第 4.5 节 “PAM 和 NSS”)的預設語言環境。
這個環境能夠給你提供最好的桌面體驗,並保持穩定。即使 X 視窗系統不工作,你也可以訪問帶有可讀資訊的多功能字元終端。這對於使用非羅馬字元(如中文,日語和韓語)的語言來說是必不可少的。
![]() |
注意 |
---|---|
改善 X 會話管理軟體包可能會使另一種可用的方法,但請閱讀下面的內容作為設定語言環境的通用和基礎的方法。對於 gdm3(1),我們知道你能夠通過它的選單來選擇 X 會話的語言環境。 |
在 PAM 配置檔案中的下面這行定義了語言環境的檔案位置,例如 “/etc/pam.d/gdm3
”。
auth required pam_env.so read_env=1 envfile=/etc/default/locale
將這行改成下面那樣。
auth required pam_env.so read_env=1 envfile=/etc/default/locale-x
對於中文,建立一個帶有 “-rw-r--r-- 1 root root
” 許可權的
“/etc/default/locale-x
” 檔案,幷包含下面這行。
LANG="zh_CN.UTF-8"
保持用於其它程式的預設 “/etc/default/locale
” 檔案有下面這行。
LANG="en_US.UTF-8"
這是定製語言環境最通用的技術,並且會使 gdm3(1) 本身的選單選擇對話方塊被本地化。
對於該情況的另一種解決方法是使用 “~/.xsessionrc
” 檔案來改變語言環境。
對於跨平臺的資料交換(參見 第 10.1.7 节 “可移動儲存裝置”),你需要使用特殊的編碼掛載檔案系統.舉個例子,不使用選項時,mount(8) 假設 vfat 檔案系統 使用 CP437. 你需要給檔名提供明確的掛載選項來使用UTF-8 或 CP932.
![]() |
注意 |
---|---|
在 GNOME 這類的現代桌面環境下,當自動掛載一個熱拔插 U 盤時,你可以提供這樣的掛載選項。右擊桌面上的圖示,點選 "Drive" , "Setting", 輸入 "utf8" 到 "Mount options:". 當這個 U 盤下次掛載時,UTF-8 就可以了。 |
![]() |
注意 |
---|---|
如果你在升級一個系統,或者從老的非 UTF-8 系統遷移磁碟,非 ASCII 字元的檔名也許是使用老舊的 ISO-8859-1 或 eucJP 來編碼. 請尋求文字轉換工具把他們轉換到 UTF-8. 參見 第 11.1 节 “文字資料轉換工具”. |
在預設情況下,Samba 對新的客戶端(Windows NT, 200x, XP)使用
Unicode,但對老的客戶端(DOS 和 Windows 9x/Me)使用 CP850.可以在 "/etc/samba/smb.conf
"
檔案裡面,使用"dos charset
" 來改變老客戶端的這個預設編碼。比如說,CP932 表示為日語。
在 Debian 系統中顯示的許多文件和文字資訊有翻譯存在,比如錯誤資訊、標準程式輸出、選單和手冊頁。GNU gettext(1) 命令工具鏈是大部分翻譯活動的後端工具。
aptitude(8) 裡,"Tasks" → "Localization" 提供一個有用的二進位制包擴充套件列表, 給應用程式增加本地化資訊和提供翻譯文件。
舉個例子,你可以安裝 manpages-<LANG>
包來獲得本地化 man 手冊頁資訊。從
"/usr/share/man/it/
" 來讀取 <programname> 義大利語的 man
手冊頁 ,執行下面的操作。
LANG=it_IT.UTF-8 man <programname>
sort(1) 的字元排序,受 語言環境的影響. 西班牙語和英語語言環境排序是不一樣的。
ls(1)
的日期格式受語言環境影響. "LANG=C ls -l
" 和
"LANG=en_US.UTF-8
" 的日期格式是不一樣的(參見 第 9.2.5 节 “定製時間和日期的顯示”).
不同語言環境的數字標點不一樣.比如說,英語語言環境中, 一千點一顯示為
"1,000.1
",而在德語語言環境中,它顯示為 "1.000,1
".
你可以在電子表格程式裡面看到這個不同。