Книга: Linux программирование в примерах

13.2.8. Другие данные локали: nl_langinfo()

13.2.8. Другие данные локали: nl_langinfo()

Хотя ранее мы сказали, что API catgets() трудно использовать, одна часть этого API обычно полезна: nl_langinfo(). Она предоставляет дополнительные связанные с локалью сведения, помимо тех, которые доступны из struct lconv:

#include <nl_types.h>
#include <langinfo.h>
char *nl_langinfo(nl_item item);

Заголовочный файл <nl_types.h> определяет тип nl_item. (Это скорее всего int или enum.) Параметр item является одной из именованных констант, определенных в <langinfo.h>. Возвращаемое значение является строкой, которую можно при необходимости использовать либо непосредственно, либо в качестве форматирующей строки для strftime().

Доступная информация поступает из нескольких категорий локали. В табл. 13.3 перечислены константы элементов, соответствующие категории локали и их значения.

Таблица 13.3. Значения элементов для nl_langinfo()

Элемент Категория Значение
ABDAY_1, …, ABDAY_7 LC_TIME Сокращенные названия дней недели. Воскресенье является днем 1
ABMON_1, …, ABMON_12 LC_TIME Сокращенные названия месяцев
ALT_DIGITS LC_TIME Альтернативные символы для цифр; см. текст
AM_STR, PM_STR LC_TIME Обозначения a.m/p.m. для локали.
CODESET LC_TYPE Имя кодовой страницы для локали, т.е. использующиеся набор символов и кодировка
CRNCYSTR LC_MONETARY Символ местной валюты, описанный ниже
DAY_1, …, DAY_7 LC_TIME Названия дней недели. Воскресенье является днем 1
D_FMT LC_TIME Формат даты
D_T_FMT LC_TIME Формат даты и времени
ERA_D_FMT LC_TIME Формат даты эры.
ERA_D_T_FMT LC_TIME Формат даты и времени эры.
ERA_T_FMT LC_TIME Формат времени эры.
ERA LC_TIME Сегменты описания эры, см. текст.
MON_1, …, MON_12 LC_TIME Названия месяцев.
RADIXCHAR LC_NUMERIC Символ системы счисления. Для базы 10 это символ точки в десятичной дроби.
THOUSEP LC_NUMERIC Символ-разделитель тысяч
T_FMT_AMPM LC_TIME Формат времени в записи a.m/p.m.
T_FMT LC_TIME Формат времени.
YESEXPR, NOEXPR LC_MESSAGES Строка, представляющая положительный и отрицательный ответы.

Эра является определенным временем в истории. Поскольку она имеет отношение к датам и временам, она имеет наибольший смысл в странах, управляемых императорами и династиями.[144]

Спецификации эр POSIX могут определять эры ранее 1 г. н.э. В таких случаях у начальной даты большее абсолютное числовое значение, чем у конечной даты. Например, Александр Великий правил с 336 г. до н.э. по 323 г до н.э.

Значение, возвращенное 'nl_langinfo(ERA)', если оно не равно NULL, состоит из одной или более спецификаций эр. Каждая спецификация отделена от следующей символом ';'. Компоненты спецификации каждой эры отделяются друг от друга символом ':'. Компоненты описаны в табл. 13.4.

Таблица 13.4. Компоненты спецификации эры

Компонент Значение
Направление Символы '+' или '-'. '+' означает, что эра отсчитывается от численно меньшего года к численно большему году, а '-' означает обратный порядок
Смешение Ближайший к дате начала эры год
Дата начала Дата начала эры в виде 'гггг/мм/дд'. Это соответственно год, месяц и день. Годы до н.э используют для гггг отрицательные значения
Дата конца Дата завершения эры в том же самом виде. Допустимы два дополнительных вида: -* означает «начало времени», а +* означает «конец времени»
Название эры Название эры, соответствующее спецификации преобразования %EC функции strftime()
Формат эры Формат года в пределах эры, соответствующий спецификации преобразования %EY функции strftime()

Значение ALT_DIGITS также нуждается в некотором объяснении. Некоторые локали предоставляют «альтернативные цифры». (Рассмотрите арабский язык, в котором используется десятичная система счисления, но изображения для цифр 0–9 другие. Или рассмотрите гипотетическую локаль «Древнего Рима», использующую римские цифры.) Они появляются, например, в различных спецификациях преобразования %OC в функции strftime(). Возвращаемое значение для 'nl_langinfo(ALT_DIGITS)' является разделяемым точками с запятой списком строк символов для альтернативных цифр. Первая должна использоваться для 0, следующая для 1 и т.д. POSIX утверждает, что могут быть предоставлены до 100 альтернативных символов. Сущность в том, чтобы избежать ограничения локалей использованием символов цифр ASCII, когда у локали есть собственная система счисления.

Наконец, 'nl_langinfo(CRNCYSTR)' возвращает символ местной валюты. Первый символ возвращаемого значения, если это '-', '+' или '.', указывает, как должен использоваться символ:

Символ должен быть перед значением.

Символ должен быть после значения.

Символ должен заменить символ основания (разделитель десятичной дроби).

Оглавление книги


Генерация: 5.893. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз