LOCALE(7)

ИМЯ
locale - описание поддержки нескольких языков

ОБЗОР
#include <locale.h>

ОПИСАНИЕ
Локаль — это сочетание языковых и культурных аспектов. Они включают в себя: язык сообщений, различные наборы символов, лексикографические соглашения и т.п. Программа должна определять локализацию и действовать согласно её установкам в целях достижения взаимосвязи различных культур.

Файл <locale.h> описывает типы данных, функции и макросы, необходимые для выполнения этой задачи.

В нём описаны функции: setlocale(3), устанавливающая текущую локаль и localeconv(3), которая возвращает информацию о форматировании чисел.

Существуют различные категории локализации, которые программа может использовать; они описаны как макросы. Используя их в качестве первого аргумента функции setlocale(3), можно установить значение значение категории в желаемую локаль:

LC_COLLATE
    Эта категория изменяет поведение функций strcoll(3) и strxfrm(3), которые используются для сравнения строк с учётом местного алфавита. Например, немецкая эсцет (sharp s) рассматривается как "ss".

LC_CTYPE
    Эта категория влияет на поведение функций обработки и классификации символов, таких как: isupper(3) и toupper(3), а также многобайтных символьных функций, таких как: mblen(3) или wctomb(3).

LC_MONETARY
    влияет на информацию, возвращаемую функцией localeconv(3) , которая описывает способ отображения числа, например, необходимо ли использовать в качестве десятичного разделителя точку или запятую. Эта информация используется в функции strfmon(3).

LC_MESSAGES
    изменяет язык отображаемых сообщений и указывает, как должны выглядеть положительный и отрицательный ответы. Библиотека GNU C содержит функции gettext(3), ngettext(3) и rpmatch(3) для более удобного использования этой информации. Семейство функций GNU gettext так же учитывает переменную окружения LANGUAGE (содержащую через двоеточие список локалей), если указана допустимая категория отличная от "C".

LC_NUMERIC
    изменяет информацию, которая используется в семействе функций printf(3) и scanf(3), если необходимо использовать настройки локали. Эта информация может быть также прочитана при помощи функции localeconv(3).

LC_TIME
    влияет на поведение функции strftime(3), которая используется для отображения текущего времени в местном формате; например, большая часть Европы использует 24-часовой формат, тогда как в США используют 12-часовой.

LC_ALL
    Все вышеперечисленное.

Если второй аргумент функции setlocale(3) равен пустой строке "", то локаль по умолчанию будет определяться следующим образом:

1.  Если существует непустая переменная окружения LC_ALL, то используется её значение.

2.  Если существует переменная окружения с именем одной из вышеописанных категорий и она непустая, то её значение присваивается этой категории.

3.  Если существует непустая переменная окружения LANG, то используется её значение.

Информация о локальном форматировании чисел доступна в структуре struct lconv, возвращаемой функцией localeconv(3) , которая описана следующим образом:
struct lconv {
    /* Информация о числах (не связанная с деньгами) */
    char *decimal_point;     /* Символ разделителя дробной части */
    char *thousands_sep;     /* Разделитель групп цифр слева от
                                символа разделителя дробной части */
    char *grouping; /* Каждый элемент является номером цифры в группе;
                       элементы c большими номерами находятся левее.
                       Элемент с значением CHAR_MAX означает, что
                       группировка завершена. Элемент со значением 0
                       указывает, что предыдущий элемент используется
                       для всех групп, находящихся левее. */
    /* В оставшихся полях указывается информация о денежных
       величинах */
    char *int_curr_symbol;   /* Первые три символа являются символом
                                валюты, согласно ISO 4217. Четвёртый
                                символ является разделителем. Пятый
                                символ равен '\0'. */
    char *currency_symbol;   /* Местный символ валюты */
    char *mon_decimal_point; /* Символ разделителя дробной части */
    char *mon_thousands_sep; /* Как thousands_sep */
    char *mon_grouping;      /* Как grouping */
    char *positive_sign;     /* Знак положительных значений */
    char *negative_sign;     /* Знак отрицательных значений */
    char  int_frac_digits;   /* Представление дробных чисел в
                                международном формате */
    char  frac_digits;       /* Представление дробных чисел в локальном
                                формате */
    char  p_cs_precedes;     /* 1, если символ валюты указывается перед
                                положительным значение, 0 — если
                                следует за ним. */
    char  p_sep_by_space;    /* 1, если пробел отделяет символ валюты
                                от положительного значения */
    char  n_cs_precedes;     /* 1, если символ валюты предшествует
                                 отрицательному значению,
                                0, если следует за ним */
    char  n_sep_by_space;    /* 1, если пробел отделяет символ валюты
                                от отрицательного значения */
    /* Позиция положительного или отрицательного знака:
       0 Скобки окружают количество и символ валюты.
       1 Знак предшествует количеству и символу валюты.
       2 Знак следует за количеством и символом валюты.
       3 Знак непосредственно предшествует символу валюты.
       4 Знак непосредственно следует за символом валюты. */
    char  p_sign_posn;
    char  n_sign_posn;
};

СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001. Функции GNU gettext определены в LI18NUX2000.

СМОТРИТЕ ТАКЖЕ
locale(1), localedef(1), gettext(3), localeconv(3), ngettext(3), nl_langinfo(3), rpmatch(3), setlocale(3), strcoll(3), strfmon(3), strftime(3), strxfrm(3)