12.5.6  信息国际化

12.5.6 信息国际化

message刻面用于从一个信息索引中获取被国际化的信息。该刻面主要用于提供类似于perror()的功能。perror()在POSIX系统中根据存储于全局变量errno中的错误编号,印出系统错误信息。messages提供的功能更加灵活,其定义也非常精确。

message刻面是模板类,以字符型别charT为其模板参数。该刻面返回的字符串,型别为basic_string<charT>。刻面的基本用途是:打开一个信息名册,从中获取信息,然后关闭该名册。类messages派生于类messages_base。该基类用以定义新的catalog型别(其实就是一个int型别)。此型别的对象用于标识一个名册,messages的成员函数即针对此名册进行操作。表12-36列出了messages的成员函数。

12-36 messages的成员函数

978-7-111-51399-5-Chapter12-264.jpg

成员函数open()可接受name参数标识的名册,相应信息字符串存储于其中。它也可以是文件名称。参数loc标识出一个locale对象,通过它可以存取ctype刻面。运用该刻面可以将信息转换成期望的字符型别。

成员get()函数的确切语义没有定义。例如,POSIX系统中的实例化版本会返回一个对应的msgid的错误信息字符串。但C++标准没有进行强制规定。参数set用于在信息中建立一个子结构。例如,可用于区别系统错误和C++标准程序库的错误。

若不需要信息名册,则使用close()将其关闭。虽然函数open()和close()的接口名称暗示信息来自某个文件,但C++标准对此并没有硬性要求。更多的情况是:使用open()从文件中读取信息,之后将其储存于内存中,最后调用的close()释放相应的内存。

需要记住的,C++标准要求每个类locale内必须有两个实例化对象:messages<char>和messages<wchar_t>。除此之外C++标准程序库不支持其他的任何实例体。