Читаем Linux программирование в примерах полностью

КатегорияЗначение
LC_ALLЭта категория включает всю возможную информацию локали. Она состоит из оставшейся части элементов этой таблицы
LC_COLLATEКатегория для сравнения строк (обсуждаемого ниже) и областей регулярных выражений
LC_CTYPEКатегория для классификации символов (заглавные, строчные и т.д.) Это влияет на сопоставление регулярных выражений и функции isXXX() в
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].

Перейти на страницу:

Похожие книги

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных