Вход/Регистрация
Linux программирование в примерах
вернуться

Роббинс Арнольд

Шрифт:

Дополнительные подробности об именах локалей можно найти в справочной странице GNU/Linux setlocale(3). Обычно дистрибутивы GNU/Linux устанавливают для системы локаль по умолчанию при ее установке, основываясь на языке, выбранном тем кто устанавливал ее, и пользователям больше не приходится об этом беспокоиться.

13.2.1. Категории локалей и переменные окружения

Заголовочный файл

<locale.h>
определяет функции и структуры локали. Категории локали определяют разновидности информации, которые будут для программы зависимы от локали. Категории доступны в виде набора именованных констант. Они перечислены в табл. 13.1.

Таблица 13.1. Константы категорий локалей ISO С, определенные в

<locale.h>

Категория Значение
LC_ALL
Эта категория включает всю возможную информацию локали. Она состоит из оставшейся части элементов этой таблицы
LC_COLLATE
Категория для сравнения строк (обсуждаемого ниже) и областей регулярных выражений
LC_CTYPE
Категория для классификации символов (заглавные, строчные и т.д.) Это влияет на сопоставление регулярных выражений и функции
isXXX
в
<ctype.h>
LC_MESSAGES
Категория для специфичных для локали сообщений. Эта категория вступает в игру с GNU
gettext
, которая обсуждает далее в главе
LC_MONETARY
Категория для форматирования денежной информации, такой, как локальные и международные символы для местной валюты (например, $ против USD для доллара США), форматирования отрицательных величин и т.д.
LC_NUMERIC
Категория для форматирования числовых значений
LC_TIME
Категория для форматирования дат и времени

Эти категории определены различными стандартами. Некоторые системы могут поддерживать дополнительные категории, такие, как

LC_TELEPHONE
или
LC_ADDRESS
. Однако, они не стандартизованы; любой программе, которой нужно их использовать, но которая все равно должна быть переносимой, следует использовать
#ifdef
для окружения соответствующих разделов.

По умолчанию, программы С и библиотека С ведут себя так, как если бы они находились в локали «С» или «POSIX» для обеспечения обратной совместимости со старыми системами. Однако, вызвав

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

Переменные окружения имеют те же самые имена, что и перечисленные в табл. 13.1 категории локалей. Таким образом, команда —

export LC_NUMERIС=en_DK LC_TIME=C

— определяет, что числа должны выводиться в соответствии с локалью '

en_DK
' (английский язык в Дании), но что значения даты и времени должны выводиться в соответствии с обычной локалью '
С
'. (Этот пример просто иллюстрирует, что вы можете указывать для различных категорий различные локали; это не является чем-то обязательным, что вы должны делать.)

Переменная окружения

LC_ALL
перекрывает все другие переменные
LC_xxx
. Если
LC_ALL
не установлена, библиотека ищет определенные переменные (
LC_CTYPE
,
LC_MONETARY
и т.д.). Наконец, если ни одна из них не установлена, библиотека ищет переменную
LANG
. Вот небольшая демонстрация с использованием
gawk
:

$ unset LC_ALL LANG /* Удалить переменные по умолчанию */

$ export LС_NUMERIC=en_DK LC_TIME=C

 /* Европейские числа, дата и время по умолчанию */

$ gawk 'BEGIN { print 1.234 ; print strftime }'

 /* Вывести число, текущие дату и время */

1,234

Wed Jul 09 09:32:18 PDT 2003

$ export LC_NUMERIC=it_IT LC_TIME=it_IT

 /* Итальянские числа, дата и время */

$ gawk 'BEGIN { print 1.234 ; print strftime }'

 /* Вывести число, текущие дату и время */

1,234

mer lug 09 09:32:40 PDT 2003

$ export LC_ALL=C /* Установить перекрывающую переменную */

$ gawk 'BEGIN { print 1.234 ; print strftime }'

 /* Вывести число, текущие дату и время */

1.234

Wed Jul 09 09:33:00 PDT 2003

Для

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

Почти все GNU версии стандартных утилит Unix могут использовать локали. Таким образом, особенно на системах GNU/Linux, установка этих переменных позволяет вам контролировать поведение системы [139] .

13.2.2. Установка локали:

setlocale

139

Программисты, долгое время работавшие на С и Unix, могут предпочесть использовать локаль '

С
', даже если их родной язык английский, английские локали дают другой результат по сравнению с тем, что ожидают эти седые, понюхавшие пороху ветераны Unix — Примеч. автора.

  • Читать дальше
  • 1
  • ...
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: