Опубликован: 15.06.2004 | Доступ: свободный | Студентов: 2290 / 579 | Оценка: 4.35 / 3.96 | Длительность: 27:47:00
ISBN: 978-5-9556-0011-6
Лекция 13:

Языково-культурная среда

Аннотация: Описываются основные понятия и объекты, ассоциированные с языково-культурной средой, служебные программы и функции, позволяющие опрашивать и устанавливать характеристики среды, а также способы написания программ, настраиваемых на различные языково-культурные среды.
Ключевые слова: POSIX, языково-культурная среда, пользовательское окружение, языковые соглашения, культурные соглашения, настройка на языково-культурную среду, локализация, интернационализация, категория, lc_ctype, классификация символов, преобразование регистра символов, порядок алфавитного сравнения символов, форматирование денежных величин, форматирование числовых величин, форматы даты и времени, форматы информационных и диагностических сообщений, элемент, ключевое слово, значение, поддержка, POSIX-среда, конфигурационный параметр, переменные окружения, очередь, включаемый файл, представление, пользователь, определение, файл определения среды, определение категории, заголовок, хвостовик, комментарий, ПО, управляющий символ, идентификатор, опция, файл, charmap, KOI8-R, перевод строки, управляющие, пробел, Copy, класс символов, класс, операнд, вес, неравенство, один-ко-многим, диапазон, ASCII, цепочка символов, спецификатор преобразования, расширенное регулярное выражение, утилита, аргумент опции, маршрутное имя, аргумент, интерпретация, программа, стандартный вывод, информация, имя файла, response, опрос, функция, указатель, байт, буфер, вывод, массив, константы, минимум, диагностическое сообщение, каталог сообщений, идентификатор набора сообщений, целое число, идентификатор сообщения, длина, дескриптор каталога сообщений, маршрут

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

Согласно стандарту 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; 
/* Позиция знака минус в международных     */
/* обозначенияхотрицательных денежных      */
/* величин                                 */

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

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

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

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

char *mon_grouping; 
/* Размеры групп цифр при форматировании    */
/* денежных величин                         */

char *mon_thousands_sep; 
/* Символ, разделяющий группы цифр в        */
/* денежных величинах                       */

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

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

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

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

char *positive_sign; 
/* Знак плюс для неотрицательных            */
/* денежных величин                         */

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

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

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

char *thousands_sep; 
/* Символ, разделяющий группы цифр в        */
/* числовых величинах                       */

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

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

Антон Коновалов
Антон Коновалов

В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13
Планируется ли актуализация материалов данного очень полезного курса?

Павел Храмцов
Павел Храмцов
Россия
Денис Комаров
Денис Комаров
Россия, Москва