使用消息工具

为了便于将消息翻译为各种语言,并可以根据用户的语言环境使它们可供程序使用,有必要把消息和程序分开,以一种程序在运行时可访问到的消息目录的形式来提供消息。 为了有助于此项任务,消息工具提供命令和子例程。 包含应用程序消息的消息源文件由程序员创建,并被转换为消息目录。 应用程序根据需要使用这些目录来检索并显示消息。 消息源文件可翻译为其他语言,并转换为消息目录,这样就无需更改并重新编译程序。

消息设施包含以下的命令,可通过 shell 脚本或者从命令行显示消息:
命令 描述
dspcat 显示全部或部分消息目录
dspmsg 显示消息目录中的选定的消息
这些命令使用 NLSPATH 环境变量来查找指定的消息目录。 NLSPATH 环境变量列出了包含消息目录的文件目录。 搜索这些文件目录时,按照它们的排列顺序进行。 例如:
NLSPATH=/usr/lib/nls/msg/%L/%N:/usr/lib/nls/msg/prime/%N
%L%N 特殊变量定义如下:
特殊变量 描述
%L 指定包含消息目录的特定于语言环境的文件目录。 LC_MESSAGES 类别或 LANG 环境变量的值用于该目录名。 用户可将 LANGLC_ALLLC_MESSAGES 环境变量设为消息目录的语言环境。
%N 指定要打开的消息目录名。

如果 dspcat 命令找不到消息,那么显示缺省消息。 如果缺省消息包含 % n$ 格式字符串,必须将缺省消息括在单引号内。 如果 dspcat 命令找不到消息,并且又未指定缺省消息,那么显示系统生成的错误消息。

以下示例使用 dspcat 命令来显示现有 msgerrs.cat 消息目录中的所有消息:
/usr/lib/nls/msg/$LANG/msgerrs.cat:
dspcat msgerrs.cat
将显示以下输出:
1:1 Cannot open message catalog %s
Maximum number of catalogs already open
1:2 File %s not executable
2:1 Message %d, Set %d not found

通过以此方式显示消息目录的内容,您可以找到 mkcatdefs 命令分配给 msgerrs 消息源文件的消息标识号,以替换符号标识。 对于 dspmsg 命令,符号标识符不可用于引用,但按照所示的那样使用 dspcat 命令可使您获得必要的标识号。

下面一段简单的 shell 脚本名为 runtest,它演示了如何使用 dspmsg 命令:
if [ - x ./test ]
    ./test;
else
    dspmsg  msgerrs.cat -s 1 2 '%s NOT EXECUTABLE \n' "test";
    exit;
注: 如果不使用完整路径名 (如以上示例中所示) ,请小心设置 NLSPATH 环境变量,以便 Dspcat 命令在正确的目录中搜索目录。 LC_MESSAGES 类别或 LANG 环境变量的值也会影响文件目录搜索路径。