НАИМЕНОВАНИЕ¶
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; /* 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@asm.kiev.ua>