НАИМЕНОВАНИЕ
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_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; /* Int’l fractional digits. */
char frac_digits; /* Local fractional 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)
ПЕРЕВОД
Перевел с английского Алексей Миллер <asm [AT] asm.ua>