nl_langinfo(3) запрашивает информацию о языке и локали

Other Alias

nl_langinfo_l

ОБЗОР

#include <langinfo.h>


char *nl_langinfo(nl_item item);

char *nl_langinfo_l(nl_item item, locale_t locale);

ОПИСАНИЕ

Функция nl_langinfo() и nl_langinfo_l() предоставляют более гибкий способ доступа к информации локали, нежели localeconv(3). Функция nl_langinfo() возвращает строку со значением, соответствующим item, из текущей глобальной локали программы. Функциями nl_langinfo() возвращает строку со значением, соответствующим item, из локали, которая определена объектом локали locale (ранее создан с помощью newlocale(1)). Могут быть запрошены индивидуальные, либо дополнительные элементы категорий локали.

В качестве запрашиваемых элементов локали в поле item могут быть указаны определённые в <langinfo.h> константы:

CODESET (LC_CTYPE)
Возвращает строку с названием кодировки символов, используемой в выбранной локали, например «UTF-8», «ISO-8859-1» или «ANSI_X3.4-1968» (более известной, как US-ASCII). Это такая же строка, которую возвращает команда «locale charmap». Список названий кодировок символов можно получить по команде «locale -m» (смотрите locale(1)).
D_T_FMT (LC_TIME)
Возвращает строку, которую можно использовать как строку формата для функции strftime(3) для представления времени и даты в формате данной локали.
D_FMT (LC_TIME)
Возвращает строку, которую можно использовать как строку формата для функции strftime(3) для представления даты в формате данной локали.
T_FMT (LC_TIME)
Возвращает строку, которую можно использовать как строку формата для функции strftime(3) для представления времени в формате данной локали.
DAY_{1-7} (LC_TIME)
Возвращает название n-го дня недели. ПРЕДУПРЕЖДЕНИЕ: подразумевается формат США, в котором DAY_1 = воскресенье, а не интернациональный формат (ISO 8601), в котором первым днём недели является понедельник.
ABDAY_{1-7} (LC_TIME)
Возвращает сокращённое название n-го дня недели.
MON_{1-12} (LC_TIME)
Возвращает название n-го месяца.
ABMON_{1-12} (LC_TIME)
Возвращает сокращённое название n-го месяца.
RADIXCHAR (LC_NUMERIC)
Возвращает символ разделителя целой и дробной части (десятичную точку, запятую и т. п.).
THOUSEP (LC_NUMERIC)
Возвращает разделитель тысячных разрядов (групп по 3 цифры).
YESEXPR (LC_MESSAGES)
Возвращает регулярное выражение, которое может быть использовано в функции regex(3) для распознания положительного ответа на вопрос да/нет.
NOEXPR (LC_MESSAGES)
Возвращает регулярное выражение, которое может быть использовано в функции regex(3) для распознания отрицательного ответа на вопрос да/нет.
CRNCYSTR (LC_MONETARY)
Возвращает обозначение валюты, с предшествующими символами: «-», если знак валюты должен стоять перед числами, «+», если знак валюты должен стоять после чисел или «.», если знак валюты должен заменять разделитель целой и дробной части.

Список вышеперечисленных элементов — это всего лишь небольшая часть того, что может быть запрошено. Более подробный список приведён в справочном руководстве по библиотеке GNU C.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении данные функции возвращают указатель на строку, которая содержит значение соответствующего item из указанной локали.

Если с помощью setlocale(3) не была выбрана локаль для соответствующей категории, то nl_langinfo возвращает указатель на соответствующую строку локали «C». Это же верно и для nl_langinfo_l(), если locale задаёт локаль, в которой не определены данные langinfo.

Если задано неправильное значение item, то возвращается указатель на пустую строку.

Указатель, возвращаемый этими функциями, может указывать на статические данные, которые могут быть перезаписаны, или сам указатель может стать некорректным при последующих вызовах nl_langinfo, nl_langinfo_l() или setlocale(3). Это же утверждение применимо и к nl_langinfo_l(), если объект локали, на которую указывает locale, освобождается или изменяется функциями freelocale(3) или newlocale(3).

В POSIX указано, что приложение не может изменить строку, возвращаемую этими функциями.

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).
ИнтерфейсАтрибутЗначение
nl_langinfo() безвредность в нитяхбезвредно (MT-Safe locale)

СООТВЕТСТВИЕ СТАНДАРТАМ

POSIX.1-2001, POSIX.1-2008, SUSv2.

ЗАМЕЧАНИЯ

Поведение nl_langinfo_l() не определено, если значение locale равно специальному объекту локали LC_GLOBAL_LOCALE или некорректному описателю объекта локали.

ПРИМЕР

Следующая программа настраивает кодировку символов и чисел локали в соответствии с окружением и запрашивает кодировку символов терминала и основание системы счисления.

#include <langinfo.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
    setlocale(LC_CTYPE, "");
    setlocale(LC_NUMERIC, "");
    printf("%s\n", nl_langinfo(CODESET));
    printf("%s\n", nl_langinfo(RADIXCHAR));
    exit(EXIT_SUCCESS);
}