LOCALE(7)

НАЗВАНИЕ
locale - описание поддержки нескольких языков

СИНТАКСИС
#include <locale.h>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1

СМ. ТАКЖЕ
setlocale(3), localeconv(3), locale(1), localedef(1), rpmatch(3), strfmon(3), strcoll(3), strxfrm(3), strftime(3)