Читаем Linux API. Исчерпывающее руководство полностью

В версии glibc под номером 2.2.2 введено несколько новых, нестандартных категорий локали. В LC_ADDRESS определяются правила зависящих от локали представлений почтовых адресов. В LC_IDENTIFICATION указывается информация, идентифицирующая локаль. В LC_MEASUREMENT определяется местная система мер (например, метрическая или дюймовая). В LC_NAME устанавливаются местные правила представления личных имен и титулов. В LC_PAPER определяется стандартный для данной местности размер бумаги (например, принятый в США формат Letter или формат A4, используемый в большинстве других стран). В LC_TELEPHONE задаются правила для местного представления внутренних и международных телефонных номеров, а также международного префикса страны и префикса выхода на международную телефонную сеть.

Таблица 10.2. Содержимое подкаталогов локали

Имя файла — Назначение

LC_CTYPE — Файл содержит классификацию символов (см. isalpha(3)) и правила, применяемые при преобразовании регистра

LC_COLLATE — Файл включает правила сортировки набора символов

LC_MONETARY — Файл содержит правила форматирования денежных величин (см. localeconv(3) и )

LC_NUMERIC — Файл содержит правила форматирования для чисел, не являющихся денежными величинами (см. localeconv(3) и )

LC_TIME — Файл включает правила форматирования для даты и времени

LC_MESSAGES — Каталог содержит файлы, указывающие форматы и значения, используемые для утвердительных и отрицательных ответов (да — нет)

Фактические настройки локали, определенные в системе, могут изменяться. В SUSv3 насчет этого не выдвигается никаких требований, за исключением необходимости определения стандартной настройки локали по имени POSIX (и по историческим причинам ее синонима по имени C). Эта локаль воспроизводит исторически сложившееся поведение систем UNIX. Так, она основана на наборе кодировки символов ASCII и использует английский язык для названия дней и месяцев, а также односложных ответов yes и no. Денежные и числовые компоненты в этой локалии не определяются.

Команда locale выводит информацию о текущей локали среды (в оболочке). Команда locale — a выводит списком полный набор локалей, определенных в системе.

Задание для программы локали

Для установки и запроса локали программы используется функция setlocale(), синтаксис которой представлен далее.

#include

char *setlocale(int category, const char *locale);

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

Аргумент category выбирает, какую часть данных о локали установить или запросить, и указывается набор констант, чьи имена совпадают с категориями локали, перечисленными в табл. 10.2. Это, к примеру, означает, что можно настроить локаль так, чтобы отображалось время как в Германии, а вместе с тем задать отображение денежных сумм в долларах США. Или же, что бывает значительно чаще, мы можем использовать значение LC_ALL, чтобы указать, что нам нужно установить все аспекты локали.

Есть два различных метода настройки локали с помощью функции setlocale(). Аргумент locale должен быть строкой, указывающей на одну из локалей, определяемых в системе (то есть на имя одного из подкаталогов в каталоге /usr/lib/locale), например de_DE или en_US. Или же locale может быть указан в виде пустой строки, что означает необходимость получения настроек локали из переменных среды:

setlocale(LC_ALL, "");

Такой вызов нужно использовать, чтобы программа считала информацию из соответствующих переменных среды, имеющих отношение к локализации. Без такого вызова эти переменные среды никак не повлияют на программу.

При запуске программы, выполняющей вызов setlocale(LC_ALL,""), мы можем управлять различными аспектами локали, используя набор переменных среды, чьи имена также соответствуют категориям, перечисленным в табл. 10.2: LC_CTYPE, LC_COLLATE, LC_MONETARY, LC_NUMERIC, LC_TIME и LC_MESSAGES. Для указания настроек всей локали также можно воспользоваться переменной среды LC_ALL или LANG. При установке более одной из ранее перечисленных переменных среды у LC_ALL имеется приоритет над всеми другими переменными вида LC_*, а LANG имеет самый низкий уровень приоритета. Следовательно, LANG можно применять для настроек локали, используемых по умолчанию для всех категорий, а затем воспользоваться отдельными переменными LC_* для настройки составляющих локали на что-либо другое, чем эти установки по умолчанию.

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

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
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

Стивен Прата

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