Linux 的标准函数库支持符合 POSIX(可移植操作系统接口)标准的国际化和本地化。POSIX 是由 IEEE(电气和电子工程师协会)制定的不同操作系统之间互操作的规范。ANSI(美国国家标准协会)也为 C 编程语言制定了一个标准,该标准允许编写支持国际化的程序。
简而言之,我们可以说,处理依赖于语言或国家/地区信息的功能可以通过设置一些环境变量来修改其行为。这些功能是什么? 我们可以列举日期格式化、货币值和系统错误消息的功能。如果您不知道什么是环境变量,我建议您使用以下命令阅读手册
man environ
POSIX 标准允许使用多个配置变量,每个变量定义了对一种信息类型的处理方式,即
定义本地字母表中字符之间比较的规则。例如,在葡萄牙语中,当我们按字母顺序排序时,字母 `ã' 应被视为与 `a' 相同。
定义大写和小写字符之间比较的规则。如果我们使用 ASCII 代码,我们知道小写字母的数字代码比相应的大写字母大 32,但对于带重音符号的字母,此规则无效!
更改货币值格式化功能的行为,并允许发现,例如,当地货币的符号,或者使用点号还是逗号作为千位分隔符和小数分隔符。
确定消息将以何种语言显示以及肯定的或否定的答复是什么 (S/N)。
确定数值的读取/写入功能的行为,例如允许我们使用十进制逗号。
定义日期和时间的格式。
一次定义所有类别。 如果我们使用 LC_ALL,我们就不需要定义任何其他类别,除非我们想要该特定项目的不同行为。
如果未定义 LC_ALL,则一次定义所有类别。 命令 man
也使用它来组成它将在其中查找手册页的路径。 请参阅关于此变量的章节 Locale、Locale 和 Locale 中的观察结果。
更多信息可以在系统手册中使用以下命令获得
man 7 locale前述命令中的 `7' 是必要的,以避免与 Perl 语言的同名函数混淆。 请注意,原则上,上述配置仅影响 C 语言函数库中可用的函数。 实际上,在 Linux 中运行的所有程序都使用该库,但操作系统并未为所有程序提供多种语言的消息目录。
语言和区域的标识由两个字母的代码组成,中间用 ``_'' 符号分隔。 如果我们省略国家/地区代码,则假定为指定语言的默认国家/地区,但必须有相应的目录。 因此,代码 ``pt_PT'' 表示葡萄牙葡萄牙语,而 ``pt_BR'' 表示巴西葡萄牙语。 要选择语言/区域组合,只需在您的 /etc/profile
文件中放置一行包含
LC_ALL="pt_PT" export LC_ALL巴西用户应使用 ``pt_BR'' 而不是 ``pt_PT''。 使用以下命令测试结果(
/inexistente
是一个不存在的文件的名称)echo ÁÉÍÓÚ | tr '[:upper:]' '[:lower:]' tar tf /inexistente ls -l / date cal 1 1999第一个命令的结果应为 ``
áéíóú
''。 命令 tar
和 ls
应返回葡萄牙语消息,而 cal
应显示 1999 年 1 月的日历,星期几的标题为do se te qu qu se sá。在 Debian 发行版中,请确保已安装 ``locales'' 软件包,该软件包属于 ``admin'' 组。 包含软件包的文件名(在发行版的 2.0 版本中)是 locales_2.0.7t-1.deb
,在我的 CD 中位于 debian/main/binary-i386/admin
目录中。
直到 1997 年中期,所有 Linux 发行版都使用相同的 libc 库,该库的版本为 5,它是从 GNU 项目 libc 的旧版本开发而来的。 该库对国际化的支持非常有限,并且通常发行版中不包含任何区域设置目录,英语是默认语言。
Linux 的 libc 版本 6 基于 GNU 项目的 libc 版本 2。 国际化支持得到了很大改进,此外还包括其他与本 HOWTO 的目的无关的属性。 如果您的发行版是 Debian 版本 2、Red Hat 版本 5 或任何其他使用新 libc 的发行版,那么除了上一节中描述的内容之外,无需再做任何事情。
但是,如果您使用的发行版仍然基于 libc 5(Slackware、Caldera 1.x 或旧版本的 Debian 或 Red Hat),则需要安装区域设置集合。 不要尝试从较新的发行版复制集合,因为文件格式不兼容。 从 Portuguese HOWTO 页面获取文件 locales-pt.tgz
。 要在 Slackware 发行版中安装它,只需(以 root 用户身份)使用命令
installpkg locales-pt.tgz对于其他发行版,请使用命令
tar xzf locales-pt.tgz -C /
验证在 /usr/share/locale
中是否有两个名为 pt_BR
和 pt_PT
的子目录。 然后只需配置环境变量 LC_ALL,如前所述。