Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
Гарантируется существование двух локалей, «С» и «POSIX». Они действуют в качестве локали по умолчанию, предоставляя окружение 7-разрядного ASCII, поведение которого такое же, как на традиционных системах Unix без поддержки локалей. В противном случае, локали обозначают язык, страну, а также могут включать сведения о наборе символов. Например, '
it_ITit_IT.UTF-8Дополнительные подробности об именах локалей можно найти в справочной странице GNU/Linux setlocale(3). Обычно дистрибутивы GNU/Linux устанавливают для системы локаль по умолчанию при ее установке, основываясь на языке, выбранном тем кто устанавливал ее, и пользователям больше не приходится об этом беспокоиться.
13.2.1. Категории локалей и переменные окружения
Заголовочный файл
<locale.h>Таблица 13.1. Константы категорий локалей ISO С, определенные в
<locale.h>| Категория | Значение |
|---|---|
LC_ALL | Эта категория включает всю возможную информацию локали. Она состоит из оставшейся части элементов этой таблицы |
LC_COLLATE | Категория для сравнения строк (обсуждаемого ниже) и областей регулярных выражений |
LC_CTYPE | Категория для классификации символов (заглавные, строчные и т.д.) Это влияет на сопоставление регулярных выражений и функции is<i>XXX</i>()<ctype.h> |
LC_MESSAGES | Категория для специфичных для локали сообщений. Эта категория вступает в игру с GNU gettext |
LC_MONETARY | Категория для форматирования денежной информации, такой, как локальные и международные символы для местной валюты (например, $ против USD для доллара США), форматирования отрицательных величин и т.д. |
LC_NUMERIC | Категория для форматирования числовых значений |
LC_TIME | Категория для форматирования дат и времени |
Эти категории определены различными стандартами. Некоторые системы могут поддерживать дополнительные категории, такие, как
LC_TELEPHONELC_ADDRESS#ifdefПо умолчанию, программы С и библиотека С ведут себя так, как если бы они находились в локали «С» или «POSIX» для обеспечения обратной совместимости со старыми системами. Однако, вызвав
setlocale()Переменные окружения имеют те же самые имена, что и перечисленные в табл. 13.1 категории локалей. Таким образом, команда —
export LC_NUMERIС=en_DK LC_TIME=C— определяет, что числа должны выводиться в соответствии с локалью '
en_DKСПеременная окружения
LC_ALLLC_<i>xxx</i>LC_ALLLC_CTYPELC_MONETARYLANGgawk$ <b>unset LC_ALL LANG</b> /* Удалить переменные по умолчанию */$ <b>export LС_NUMERIC=en_DK LC_TIME=C</b> /* Европейские числа, дата и время по умолчанию */$ <b>gawk 'BEGIN { print 1.234 ; print strftime() }'</b> /* Вывести число, текущие дату и время */1,234Wed Jul 09 09:32:18 PDT 2003$ <b>export LC_NUMERIC=it_IT LC_TIME=it_IT</b> /* Итальянские числа, дата и время */$ <b>gawk 'BEGIN { print 1.234 ; print strftime() }'</b> /* Вывести число, текущие дату и время */1,234mer lug 09 09:32:40 PDT 2003$ <b>export LC_ALL=C</b> /* Установить перекрывающую переменную */$ <b>gawk 'BEGIN { print 1.234 ; print strftime() }'</b> /* Вывести число, текущие дату и время */1.234Wed Jul 09 09:33:00 PDT 2003Для
awk.Почти все GNU версии стандартных утилит Unix могут использовать локали. Таким образом, особенно на системах GNU/Linux, установка этих переменных позволяет вам контролировать поведение системы [139].
13.2.2. Установка локали:
setlocale()Как уже упоминалось, если вы ничего не делаете, программы на С и библиотека С ведет себя так, как если бы использовалась локаль «С». Функция
setlocale()