Книга: 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)
' возвращает символ местной валюты. Первый символ возвращаемого значения, если это '-
', '+
' или '.
', указывает, как должен использоваться символ:
-
Символ должен быть перед значением.
+
Символ должен быть после значения.
.
Символ должен заменить символ основания (разделитель десятичной дроби).
- 13.2.1. Категории локалей и переменные окружения
- 13.2.2. Установка локали: setlocale()
- 13.2.3. Сравнение строк: strcoll() и strxfrm()
- 13.2.4. Числовое и денежное низкоуровневое форматирование: localeconv()
- 13.2.5. Высокоуровневое числовое и денежное форматирование: strfmon() и printf()
- 13.2.6. Пример: форматирование числовых значений в gawk
- 13.2.7. Форматирование значений даты и времени: ctime() и strftime()
- 13.2.8. Другие данные локали: nl_langinfo()
- 13.2. Локали и библиотека С
- Другие инструменты для осуществления резервного копирования
- Другие изменения в 7-й версии InterBase
- Достоверные данные
- Датчик расположения и другие датчики
- 6.4 Другие файловые системы
- Как завершить работу с программой и сохранить данные, с которыми я работал?
- Другие предикаты сравнения
- Как переносить данные через USB-брелок («флэшку»)?
- В дисках используется не NTFS, а я хочу защитить свои данные. Как быть?
- Приложение E. Локализация
- Я установил программу и не хочу, чтобы другие пользователи о ней знали. Как скрыть ее?