## 第?20?章?國際化
**目錄**
[](ch20.html#id3091130)
[I18N 簡介](ch20s02.html)
[locale 變量](ch20s02.html#id3090533)
[locale 值](ch20s02.html#id3091286)
[字符集](ch20s02.html#id3091389)
[其它](ch20s02.html#id3091435)
[設置 locale](ch20s03.html)
[生成 locale](ch20s03.html#id3091569)
[locale 策略](ch20s04.html)
[中文圖形界面](ch20s04.html#id3091648)
[英文界面+中文輸入](ch20s04.html#id3091700)
[關于輸入法的設置](ch20s04.html#id3091717)
## I18N 簡介
習慣上,`internationalization`(國際化)簡寫為`I18N`,中間的數字為省略的字母個數。
在 Linux 系統中,通過定義一組環境變量來設置程序的語言環境,以實現對`I18N`的支持,這種機制稱為:`locale`(本地化)
### locale 變量
| | |
| --- | --- |
| LANG | 低優先級全局 locale 變量 | 如果下面的變量未賦值,默認使用此變量的值 |
| LC_COLLATE | 比較和排序習慣 | 會影響目錄列表的分類顯示等 |
| LC_CTYPE | 定義系統的字符處理特性 | 哪些字符能被視為字母、數字,等等;與中文輸入關系密切 |
| LC_MESSAGES | 提示信息,錯誤信息, 狀態信息, 標題, 標簽, 按鈕和菜單等 |
| LC_MONETARY | 定義貨幣單位和貨幣型數值的格式 |
| LC_NUMERIC | 定義非貨幣型數值的格式 | 影響到千位分隔符和小數分隔符等 |
| LC_TIME | 定義日期和時間的格式 |
| LC_NAME | 姓名書寫方式 |
| LC_ADDRESS | 地址書寫方式 |
| LC_TELEPHONE | 電話號碼書寫方式 |
| LC_MEASUREMENT | 度量衡表達方式 |
| LC_PAPER | 定義默認的紙張尺寸 |
| LC_IDENTIFICATION | 對 locale 自身包含信息的概述 |
| LC_ALL | 高優先級全局 locale 變量 | 為此變量賦值會強行覆蓋上面變量的值,不推薦 |
* 假如未設置以上變量,系統將采用 POSIX 作為 lcoale,也就是 C locale
### locale 值
`locale` 變量的值有三個要素:語言代碼 (Language Code)、 地域代碼 (Country Code) 和字符集(Encoding)[[35](ch20s02.html#ftn.id3091303)]:
```
語言代碼[_地域代碼[.字符集]]
```
例如:
| 語言/國家代碼 | 描述 |
| --- | --- |
| en_US.ISO-8859-1 | 美國英語 |
| en_US.UTF-8 |
| zh_CN.UTF-8 | 簡體中文 |
| zh_TW.UTF-8 | 繁體中文 |
### 字符集
眾所周知,計算機中的信息,是以數字形式表示的,字符也不例外。字符以數字編號的形式存儲,使用時,根據這個編號,在字符集中找到相應的字符
字符集是字符在系統內的編碼方式,也就是通常所說的內碼[[36](ch20s02.html#ftn.id3091405)]。不同的字符集有不同的編碼方式,
例如“碼”字,它的 GB2312編碼 為 426B;UTF-8編碼 為 E7A081 。如果錯誤的以 GB2312編碼 來檢索 E7A081,將會產生類似 “锘跨爜” 的亂碼
只要系統中安裝了中文字體,通過字符集的支持,便可以正常顯示中文,而無需設置 locale;locale 可以使操作界面顯示中文,并可以使用中文輸入等
### 其它
另外還有一個本地化變量叫做 LINGUAS。它會影響到基于 gettext 的程序[[37](ch20s02.html#ftn.id3091444)];它還能決定某些特殊軟件包的本地化,比如kde-i18n和openoffice。這個變量的值為一組以空格分隔的語言代碼:
```
LINGUAS="zh en"
```
* * *
> [[35](ch20s02.html#id3091303)] 中文 Windows 系統中使用的字符集為 `GB2132`,而 `UTF-8` 是大勢所趨,它能夠顯示比 GB2312 更多的字符
> [[36](ch20s02.html#id3091405)] 參見`/usr/share/i18n/charmaps`文件
> [[37](ch20s02.html#id3091444)] 通過編譯時安裝本地化文件的方式實現`I18N`,編譯時需要Native Language Support(NLS)支持
## 設置 locale
設置 `locale` 其實就是設置環境變量。在 `/etc/environment`[[38](ch20s03.html#ftn.id3091511)]文件中設置全局環境變量:
```
LANG="zh_CN.UTF-8"
```
在`~/.profile`或`~/.bashrc`中設置用戶環境變量:
```
export LANG="zh_CN.UTF-8"
```
完成后可以使用**locale**命令檢驗
### 生成 locale
如果你設置了一個不可用的 locale,請使用 localedef 生成該 locale
```
localedef -c -i en_US -f ISO-8859-15 en_US.ISO-8859-15
```
可能你在系統中只要用到一個或者兩個 locale。你可以在 `/etc/locale.gen` 中指定所需的的 locale。添加 locale 到 `/etc/locale.gen`:
```
en_GB ISO-8859-1
en_GB.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15
```
下一步是執行locale-gen。它會生成`/etc/locale.gen`文件中指定的所有 locale。
* * *
> [[38](ch20s03.html#id3091511)] 在 gentoo 中使用專門的文件 `/etc/env.d/02locale` 設置 locale
## locale 策略
### 中文圖形界面
由于 Linux 的控制臺不能方便的顯示中文,所以最實用的方案是“英文控制臺+中文圖形界面”
為了能夠正常處理中文,需要使用locale-gen生成中文 locale,在`/etc/locale.gen`文件中添加如下內容:
```
zh_CN.UTF-8 UTF-8
zh_CN.GB18030 GB18030
zh_CN.GBK GBK
zh_CN GB2312
```
然后在 gdm 啟動菜單中選擇中文,或者寫入配置文件`~/.dmrc`
```
[Desktop]
Session=openbox
Language=zh_CN.UTF-8
```
### 英文界面+中文輸入
使用如下設定:
```
LANG="en_US.UTF-8"
LC_CTYPE="zh_CN.UTF-8"
```
### 關于輸入法的設置
在`~/.profile`或`~/.bashrc`中設置用戶環境變量:
**例?20.1.?輸入法配置 `.profile`**
```
export XMODIFIERS="@im=fcitx"
export GTK_IM_MODULE=xim
export QT_IM_MODULE=xim
fcitx&
```
> [](ch20s04.html#i18n-im1) 使用fcitx輸入法
> [](ch20s04.html#i18n-im2) GTK2 程序輸入法引擎。fcitx 使用xim引擎
> [](ch20s04.html#i18n-im3) QT 輸入法引擎。
- 開源世界旅行手冊
- 授權
- 致謝
- 序言
- 更新紀錄
- 導讀
- 如何寫作科技文檔
- 部分?I.?氣候
- 第?1?章?GUI? CLI?
- 第?2?章?UNIX 縮寫風格
- 第?3?章?版本號的迷霧
- 第?4?章???Vim 還是 Emacs
- 第?5?章???DocBook 還是 TeX
- 第?6?章?完全用 Gnu/Linux 工作
- 第?7?章?病毒
- 第?8?章?磁盤 分區
- 第?9?章?文件系統
- 第?10?章???發行版介紹
- 第?11?章???編程語言
- 第?12?章?無根的根:無名師的 Unix 心傳
- 部分?II.?地理
- 第?13?章?基礎知識
- 第?14?章?命令系統
- 第?15?章?基本系統
- 第?16?章?軟件管理
- 第?17?章?核心工具集
- 第?18?章?編譯工具鏈
- 第?19?章?圖形界面
- 第?20?章?國際化
- 第?21?章???內核
- 第?22?章?Grub
- 第?23?章?服務器
- 第?24?章?Vim 編輯器
- 第?25?章?Emacs 入門
- 第?26?章?正則表達式
- 第?27?章?docbook 指南
- 第?28?章?Git 版本控制系統
- 第?29?章?ConTeXt 入門指南
- 部分?III.?景觀
- 第?30?章?終極 Shell -- ZSH
- 第?31?章?完美工作站 Archlinux
- 第?32?章?組織你的意念:Emacs org mode
- 第?33?章???Zsh+screen
- 第?34?章???gentoo stage3
- 第?35?章???硬件問題
- 第?36?章???網絡設置
- 第?37?章???自制 LiveCD
- 第?38?章?awesome
- 第?39?章?openbox 工作環境
- 第?40?章???Emacs muse
- 第?41?章???寫作工具鏈
- 第?42?章?使用 lftp
- 第?43?章???Firefox 使用技巧
- 第?44?章???FVWM
- 部分?IV.?地質
- 第?45?章?Unix
- 第?46?章???Gnu
- 第?47?章?軟件業自由之神——Richard Stallman
- 第?48?章?Linux
- 第?49?章?GNOME與KDE的戰爭
- 第?50?章???Vim Emacs
- 第?51?章???年代紀
- 第?52?章?我的選擇
- 第?53?章???補遺