Программирование в стандарте POSIX

       

Основные понятия и объекты


Согласно стандарту POSIX-2001, языково-культурная среда – это часть пользовательского окружения, зависящая от языковых и культурных соглашений.

Настройка на определенную языково-культурную среду представляет собой процесс формирования в системе совокупности данных, специфичных для поддержки конкретных естественных языков, местных настроек и кодировок символов. Иногда подобный процесс называют также локализацией , в противоположность интернационализации – процессу подготовки приложений, способных настраиваться на различные языково-культурные среды.

Языково-культурная среда формируется из данных, принадлежащих нескольким именованным категориям. Каждая категория управляет определенными аспектами поведения компонентов системы. Имена и назначение категорий соответствуют следующим переменным окружения.

LC_CTYPE

Классификация символов, преобразование регистра (верхний/нижний) символов.

LC_COLLATE

Порядок алфавитного сравнения символов.

LC_MONETARY

Форматирование денежных величин.

LC_NUMERIC

Форматирование числовых (но не денежных) величин.

LC_TIME

Форматы даты и времени.

LC_MESSAGES



Форматы информационных и диагностических сообщений и интерактивных ответов.

Категории подразделяются на более мелкие элементы, средством именования которых служат ключевые слова. Например, в категорию LC_CTYPE входят элементы с именами alpha (буквы), digits (цифры) и т.п.

Как правило, значениями перечисленных переменных окружения являются абсолютные маршрутные имена файлов, содержащих соответствующие определения. Другой вариант (если значение не начинается с символа /) – имя среды.

Расширение XSI стандарта POSIX-2001 уточняет один из возможных форматов имени языково-культурной среды:

язык[_территория][.кодировка][@модификатор]

Примеры: ru_RU.koi8r, ru_UA.

Модификатор позволяет выбрать конкретный вариант данных о среде в пределах отдельной категории (скажем, словарный порядок сравнения в категории LC_COLLATE). Пример: LC_COLLATE=De_DE@dict.

В каждой реализации определены одна или несколько языковокультурных сред.
Поддержка POSIX-среды с именами-синонимами «POSIX» и «C» является обязательной. Кроме того, возможно создание новых сред, если в системе определен конфигурационный параметр _POSIX2_LOCALEDEF.

Стандартом POSIX-2001 предусмотрены две «собирательные» переменные окружения, определяющие сразу все (или почти все) категории языково-культурной среды.

LC_ALL

Значение этой переменной окружения учитывается в первую очередь.

LANG

Значение этой переменной окружения учитывается в последнюю очередь, если не определены значения переменных вида LC_*.

В любой реализации некоторая среда (POSIX или иная) должна быть определена как подразумеваемая, т. е. используемая тогда, когда перечисленные выше переменные окружения не определены или имеют пустые значения. Это можно сделать, например, путем присваивания LANG=POSIX или LANG=C, после чего подразумеваемой станет POSIX-среда.

В структуре lconv, описанной во включаемом файле <locale.h>, содержатся поля, определяющие форматы денежных и числовых величин. Даже беглый взгляд на перечень этих полей позволяет составить представление о богатстве возможностей определения языково-культурной среды.

char *currency_symbol; /* Местное обозначение денежной величины */

char *decimal_point; /* Символ, отделяющий целую часть */ /* числа от дробной */

char frac_digits; /* Количество цифр в дробной */ /* части местных денежных величин */

char *grouping; /* Размеры групп цифр при */ /* форматировании чисел */

char *int_curr_symbol; /* Международное обозначение денежной */ /* величины */

char int_frac_digits; /* Количество цифр в дробной части */ /* международных денежных величин */

char int_n_cs_precedes; /* Признак того, что международное */ /* обозначение предшествует отрицательной */ /* денежной величине, а не следует за ней */

char int_n_sep_by_space; /* Признак того, что международное */ /* обозначение отделяется от отрицательной */ /* денежной величины пробелом */

char int_n_sign_posn; /* Позиция знака минус в международных */ /* обозначенияхотрицательных денежных */ /* величин */



Поддержка POSIX-среды с именами-синонимами «POSIX» и «C» является обязательной. Кроме того, возможно создание новых сред, если в системе определен конфигурационный параметр _POSIX2_LOCALEDEF.

Стандартом POSIX-2001 предусмотрены две «собирательные» переменные окружения, определяющие сразу все (или почти все) категории языково-культурной среды.

LC_ALL

Значение этой переменной окружения учитывается в первую очередь.

LANG

Значение этой переменной окружения учитывается в последнюю очередь, если не определены значения переменных вида LC_*.

В любой реализации некоторая среда (POSIX или иная) должна быть определена как подразумеваемая, т. е. используемая тогда, когда перечисленные выше переменные окружения не определены или имеют пустые значения. Это можно сделать, например, путем присваивания LANG=POSIX или LANG=C, после чего подразумеваемой станет POSIX-среда.

В структуре lconv, описанной во включаемом файле <locale.h>, содержатся поля, определяющие форматы денежных и числовых величин. Даже беглый взгляд на перечень этих полей позволяет составить представление о богатстве возможностей определения языково-культурной среды.

char *currency_symbol; /* Местное обозначение денежной величины */

char *decimal_point; /* Символ, отделяющий целую часть */ /* числа от дробной */

char frac_digits; /* Количество цифр в дробной */ /* части местных денежных величин */

char *grouping; /* Размеры групп цифр при */ /* форматировании чисел */

char *int_curr_symbol; /* Международное обозначение денежной */ /* величины */

char int_frac_digits; /* Количество цифр в дробной части */ /* международных денежных величин */

char int_n_cs_precedes; /* Признак того, что международное */ /* обозначение предшествует отрицательной */ /* денежной величине, а не следует за ней */

char int_n_sep_by_space; /* Признак того, что международное */ /* обозначение отделяется от отрицательной */ /* денежной величины пробелом */

char int_n_sign_posn; /* Позиция знака минус в международных */ /* обозначенияхотрицательных денежных */ /* величин */


Содержание раздела