我们今天来讲解本地语言支持(NLS)使用多种环境变量来影响对AIX语言环境的选择。可以设置这些变量的值来更改AIX语言环境信息的搜索路径。
LANG
指定安装时缺省的AIX语言环境。
注:LANG 环境变量值是在安装时确定的。(除非设置了 LC_* 环境变量,否则每个进程都使用都使用该语言环境)。可以使用 SMIT 中的 Manage Language Environment 菜单来更改 LANG 语言环境。有关使用 SMIT 的更多信息,请参阅 AIX 5L Version 5.2 System Management Concepts: Operating System and Devices 中的 System Management Interface Tool (SMIT) Overview。C 和 POSIX 语言环境的目的就是提供***性能。
LC_ALL
覆盖 LANG 环境变量的值以及所有其它 LC_* 环境变量的值。
LC_COLLATE
指定用于 LC_COLLATE 类别信息的AIX语言环境。LC_COLLATE 类别确定了字符整序和字符串整序的规则,这些规则控制着范围、同等类以及多字符整序元素的行为。
LC_CTYPE
指定用于 LC_CTYPE 类别信息的AIX语言环境。LC_CTYPE 类别确定了字符处理的规则,这些规则控制着文本数据字符(即单字节和多字节字符)的字节序列的解释、字符的分类(如,字母、数字等)以及字符类的行为。
LC__FASTMSG
当 LC__FASTMSG 设为 true 时,该变量规定对于 C 和 POSIX 语言环境使用缺省消息,并且规定忽略 NLSPATH。否则,执行符合 POSIX 规范的消息处理。在 /etc/environment 文件中,缺省值为 LC__FASTMSG=true。
LC_MESSAGES
指定用于 LC_MESSAGES 类别信息的AIX语言环境。LC_MESSAGES 类别确定了控制肯定性和否定性响应的规则,以及控制用于消息和菜单的语言环境(语言)的规则。
在使用不能显示多字节字符的终端时,如果希望不显示不可打印字符,可将 LC_MESSAGES 环境变量设为 C@lft。可显示多字节字符的登录会话禁用此设置。
使用 cron 或 inittab 启动的进程保留 C@lft LC_MESSAGES 设置,并使用 setlocale() 子例程建立缺省消息的语言环境。如果应用程序不显示消息,请确保 LC_MESSAGES="C@lft",并通过 putenv("LC_MESSAGES=") 子例程禁用此设置。其结果就是使用经翻译的消息目录的输出。
LC_MONETARY
指定用于 LC_MONETARY 类别信息的语言环境。LC_MONETARY 类别确定了控制货币相关格式的规则。
LC_NUMERIC
指定用于 LC_NUMERIC 类别信息的AIX语言环境。LC_NUMERIC 类别确定了控制非货币数字格式的规则。
LC_TIME
指定用于 LC_TIME 类别信息的语言环境。LC_TIME 类别确定了控制日期和时间格式的规则。
LOCPATH
指定用于本地化信息的搜索路径,包括二进制AIX语言环境文件、输入法和代码集转换器。
注:所有的 setuid 和 setgid 程序都忽略 LOCPATH 环境变量。
NLSPATH
指定用于查找消息目录文件的搜索路径。NLS 子系统的消息工具组件使用该环境变量。请参阅 catopen 子例程以获取更多有关 NLSPATH 变量所要求的格式的信息。
影响AIX语言环境选择的环境变量可分为三种优先级类:高、中和低。处于高优先级类的环境变量有:
LC_ALL
LC_COLLATE
LC_CTYPE
处于中优先级类的环境变量有:
LC_MESSAGES
LC_MONETARY
LC_NUMERIC
LC_TIME
而处于低优先级类的环境变量是:LANG
当 setlocale 子例程为一个特定类别或所有类别请求AIX语言环境时,将按以下方式,根据这些环境变量设置的优先级级别对这些设置进行查询:
如果设置了 LC_ALL 环境变量,则所有六个类别都使用该变量指定的环境变量。例如,如果 LC_ALL 环境变量等于 en_US,而 LANG 环境变量等于 fr_FR,调用 setlocale 子例程会把所有六个类别都设为 en_US 语言环境。
如果 LC_ALL 环境变量未设,则各个类别分别使用由各自对应的环境变量指定的AIX语言环境。例如,如果 LC_ALL 环境变量未设,LC_COLLATE 环境变量设为 de_DE,而 LC_TIME 环境变量设为 fr_CA,那么调用 setlocale 子例程将把 LC_COLLATE 类别设为 de_DE,而把 LC_TIME 类别设为 fr_CA。这两个环境变量中的任一方都不会优先于另一方。
如果 LC_ALL 环境变量未设,并且某一个特定的 LC_* 环境变量的值也未设,那么 LANG 环境变量的值就决定了这一特定类别的设置。
例如,如果 LC_ALL 环境变量未设,LC_CTYPE 环境变量设为 en_US,LC_NUMERIC 环境变量未设,LANG 环境变量设为 is_IS,那么调用 setlocale 子例程会将 LC_CTYPE 类别设为 en_US,而将 LC_NUMERIC 类别设为 is_IS。LANG 语言环境只为那些先前未由 LC_*? 环境变量确定的类别指定语言环境。
如果 LC_ALL 环境变量未设,某一个特定的 LC_* 环境变量的值也未设,而且 LANG 环境变量的值也同样未设置,那么该特定类别的环境变量缺省为 C 语言环境。例如,如果 LC_ALL 环境变量未设,LC_MONETARY 环境变量设为 sv_SE,LC_TIME 环境变量未设,LANG 环境变量也未设,那么调用 setlocale 子例程会将 LC_MONETARY 类别设为 sv_SE,而将 LC_TIME 类别设为 C。
关于AIX语言的知识,我们就讲解的很全面了。
【编辑推荐】