|
NLS. Сообщения на родном языке.Ранее уже упоминалась возможность получения сообщений и работы с программой на родном языке. Такая возможность существует, и даннное средство называется NLS (National (или Native) Language Support). "Национализация" в действительности включает в себя несколько аспектов :
Чтобы организовать работу с сообщениями программы и дать возможность переводить их на другие языки, было введено такое понятие, как message catalog ( каталог сообщений ). Каталог сообщений хранится отдельно от программы. Естественно, каждая программа может ( и должна ! ) вести свой собственный каталог сообщений, а система NLS предоставляет средства для поддержки корректной работы. Большинство программ, а также системные библиотеки (libc и т.д.) используют NLS и их сообщения могу быть переключены на другой язык. Message catalog - это фактически база данных, выборка из которой происходит по ключам :
В результате, на выходе, мы получаем строку конкретного сообщения конкретной программы на нужном нам языке. Система NLS предоставляет набор стандартных библиотечных вызовов для работы с каталогами сообщений и набор утилит для создания и поддержания этих каталогов (базы). В настоящее время существут две основных реализации NLS :
В наиболее широко распространенной реализации XPG4 всем сообщениям программы присваивается определенный номер, который служит индексом для поиска текстовой строки в message catalog-е. Кроме того может существовать несколько наборов (sets) сообщений внутри одного каталога. Для поиска самих message catalog-ов от данной программы используется переменная окружения NLSPATH . Пример (XPG4):Данный пример демонстрирует три этапа получения сообщения из каталога:
1. Исходный текст message catalog-a:example.msg file:
2. Компиляция message catalog-а :Полученный файл обрабатывается утилитой gencat для получения файла каталога .msg . ПРИМЕЧАНИЕ: Здесь рассматривается исходная XPG4 версия, однако входящая в состав Linux libc Linux gencat отличается ключами командной строки и имеет дополнительные возможности (не POSIX). В частности, используя символ # можно определять костанты для генерации *.h файлов. (см. tutorial ) $ gencat example.cat example.msg 3. Пример использования message catalog-a :/* X/Open XPG4 message catalog test */ #include <locale.h> #include <nl_types.h> char *MF_EXAMPLE = "example.cat"; main() { nl_catd catd; int error; (void)setlocale(LC_ALL, ""); catd = catopen(MF_EXAMPLE, 0); /* Get the message number 1 from the first set.*/ printf( catgets(catd,1,1,"Hello world\n") ); /* Get the message number 1 from the second set.*/ printf( catgets(catd, 2, 1,"Howdy\n") ); /* Display an error message. No message 4 in set 1.*/ printf( catgets(catd, 1, 4,"example: 100.220 Permission is denied to read the file %s.\n"), MF_EXAMPLE); catclose(catd); } Запуск:$ cc -o example example.c |
||||||||||||||||||
With any suggestions or questions please feel free to contact us |