## 第 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&
```
> [![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png)](ch20s04.html#i18n-im1) 使用fcitx输入法
> [![2](https://box.kancloud.cn/2015-10-12_561bcb768596e.png)](ch20s04.html#i18n-im2) GTK2 程序输入法引擎。fcitx 使用xim引擎
> [![3](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png)](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 章 补遗