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

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

Создание и опрос характеристик языково-культурной среды

Для создания целевой языково-культурной среды служит утилита localedef:

localedef [-c] [-f файл_отображения_символов] 
          [-i исходный_файл] 
          [-u имя_набора_символов]
          имя_целевой_среды

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

Исходные данные для localedef поступают из файла с именем операнда опции -i или со стандартного ввода.

Операнд имя_целевой_среды определяет имя создаваемой среды. Она может быть как общедоступной, так и приватной, с ограниченным доступом.

Аргументом опции -f является маршрутное имя файла отображения символов. После опции -u можно задать имя нестандартного набора символов.

Опция -c предписывает генерировать выходной файл даже при наличии предупреждений.

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

Для получения информации о языково-культурных средах предназначена служебная программа locale:

locale [-a | -m]
locale [-ck] имя ...

Будучи вызванной без аргументов, утилита locale выдает на стандартный вывод сводную информацию о среде, которая состоит из значений соответствующих переменных окружения (описанных выше, а также дополнительных, определенных, быть может, целевой системой). Результат может выглядеть так, как показано в листинге 13.6. Кавычки вокруг значений всех переменных окружения, кроме LANG, означают, что они не были установлены явным образом, а определены по значению $LANG.

LANG=ru_RU.koi8r
LC_CTYPE="ru_RU.koi8r"
LC_NUMERIC="ru_RU.koi8r"
LC_TIME="ru_RU.koi8r"
LC_COLLATE="ru_RU.koi8r"
LC_MONETARY="ru_RU.koi8r"
LC_MESSAGES="ru_RU.koi8r"
LC_PAPER="ru_RU.koi8r"
LC_NAME="ru_RU.koi8r"
LC_ADDRESS="ru_RU.koi8r"
LC_TELEPHONE="ru_RU.koi8r"
LC_MEASUREMENT="ru_RU.koi8r"
LC_IDENTIFICATION="ru_RU.koi8r"
LC_ALL=
13.6. Возможный результат работы служебной программы locale.

При наличии аргументов выдается информация о некоторых (если задано ключевое слово) или обо всех (если указано имя категории) элементах категорий.

Опциям служебной программы locale приписан следующий смысл.

-a

Выдать информацию обо всех общедоступных языково-культурных средах (включая POSIX-среду ).

-m

Выдать имена доступных файлов отображения символов.

-c

Выдавать имена выбранных (прямо или косвенно, посредством ключевых слов) категорий, что делает результаты более читабельными, когда они охватывают несколько категорий.

-k

Выдавать имена и значения заданных элементов категорий.

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

Приведем еще два примера употребления утилиты locale. Данные о категории LC_TIME, выдаваемые по команде

locale -ck LC_TIME

могут выглядеть так, как показано в листинге 13.7.

LC_TIME
abday="Вск;Пнд;Втр;Срд;Чтв;Птн;Сбт"
day="Воскресенье;Понедельник;Вторник;Среда;
Четверг;Пятница;Суббота"
abmon="Янв;Фев;Мар;Апр;Май;Июн;Июл;Авг;Сен;
Окт;Ноя;Дек"
mon="Января;Февраля;Марта;Апреля;Мая;Июня;
Июля;Августа;Сентября;Октября;Ноября;Декабря"
d_t_fmt="%a %d %b %Y %T"
d_fmt="%d.%m.%Y"
t_fmt="%T"
. . .
first_weekday=1
first_workday=1
cal_direction=1
date_fmt="%a %b %e %H:%M:%S %Z %Y"
time-codeset="KOI8-R"
13.7. Фрагмент возможного результата выполнения команды locale -ck LC_TIME.

Второй пример демонстрирует фрагмент интернационализированного варианта shell-процедуры, анализирующей интерактивный ответ пользователя. Предполагается, что ответ является значением переменной response.

if echo "$response" | grep -Eq 
   "$(locale yesexpr)"
then
echo "Ответ положительный"
else
echo "Ответ отрицательный"
fi
13.8. Фрагмент интернационализированного варианта shell-процедуры.
Антон Коновалов
Антон Коновалов

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