Для упрощения перевода сообщений на различные языки и обеспечения доступа к ним программ, зависящих от пользовательской локали, необходимо хранить сообщения отдельно от программы в форме каталогов сообщений, к которым программа может обращаться во время выполнения. Для выполнения этой задачи служат средства работы с сообщениями. Исходные файлы сообщений для приложений создаются программистом и преобразуются в каталоги сообщений. Во время работы приложение может обращаться к этим каталогам и отображать необходимые сообщения. Исходные файлы сообщений можно переводить на другие языки и преобразовывать в каталоги сообщений без изменения и повторной компиляции программы.
Для вывода сообщений с помощью сценариев оболочки или с помощью командной
строки применяются следующие две команды работы с сообщениями:
dspcat | Показывает весь каталог сообщений или его часть. |
dspmsg | Показывает выбранное сообщение из каталога |
Эти команды используют переменную среды NLSPATH для поиска каталога сообщений. Значение переменной среды NLSPATH представляет собой список каталогов файловой системы, в которых хранятся каталоги сообщений. Поиск в этих каталогах выполняется в том порядке, в котором они заданы в переменной. Например:
NLSPATH=/usr/lib/nls/msg/%L/%N:/usr/lib/nls/msg/prime/%N
Специальные переменные %L и %N определены следующим
образом:
Если команде dspcat не удается найти указанное сообщение, то она показывает сообщение по умолчанию. Если сообщение по умолчанию содержит строки форматирования %n$, его необходимо заключить в одиночные кавычки. Если команде dspcat не удается найти указанное сообщение и сообщение по умолчанию не задано, то выдается системное сообщение об ошибке.
Следующий пример позволяет просмотреть все сообщения из каталога сообщений msgerrs.cat с помощью команды dspcat:
/usr/lib/nls/msg/$LANG/msgerrs.cat: dspcat msgerrs.cat
Будут показаны следующие данные:
1:1 Не удалось открыть каталог сообщений %s Уже открыто максимальное возможное число каталогов 1:2 Файл %s не является исполняемым файлом 2:1 Сообщение %d из набора %d не найдено
Просмотрев таким образом содержимое каталога сообщений, можно определить номера ИД сообщений, связанных с исходным файлом сообщений msgerrs с помощью команды mkcatdefs, и изменить символьные идентификаторы. Символьные идентификаторы нельзя непосредственно использовать в команде dspmsg, но с помощью команды dspcat можно определить номера сообщений.
Ниже приведен пример простого сценария runtest, который показывает, как можно использовать команду dspmsg:
if [ - x ./test ] ./test; else dspmsg msgerrs.cat -s 1 2 '%s НЕ ЯВЛЯЕТСЯ ИСПОЛНИМЫМ ФАЙЛОМ \n' "test"; exit;
Примечание: Если, как в приведенных примерах, не указывать полный путь, то необходимо предварительно присвоить переменной среды NLSPATH такое значение, чтобы команда dspcat выполняла поиск каталога сообщений в правильном каталоге файловой системы. Значение LC_MESSAGES и LANG также влияет на путь, применяемый при поиске каталога.