учебники, программирование, основы, введение в,

 

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

Основные понятия и объекты
Согласно стандарту POSIX-2001, языково-культурная среда – это часть пользовательского окружения, зависящая от языковых и культурных соглашений.
Настройка на определенную языково-культурную среду представляет собой процесс формирования в системе совокупности данных, специфичных для поддержки конкретных естественных языков, местных настроек и кодировок символов. Иногда подобный процесс называют также локализацией , в противоположность интернационализации – процессу подготовки приложений, способных настраиваться на различные языково-культурные среды.
Языково-культурная среда формируется из данных, принадлежащих нескольким именованным категориям. Каждая категория управляет определенными аспектами поведения компонентов системы. Имена и назначение категорий соответствуют следующим переменным окружения.
LC_CTYPE
Классификация символов, преобразование регистра (верхний/нижний) символов.
LC_COLLATE
Порядок алфавитного сравнения символов.
LC_MONETARY
Форматирование денежных величин.
LC_NUMERIC
Форматирование числовых (но не денежных) величин.
LC_TIME
Форматы даты и времени.
LC_MESSAGES
Форматы информационных и диагностических сообщений и интерактивных ответов.
Категории подразделяются на более мелкие элементы, средством именования которых служат ключевые слова. Например, в категорию LC_CTYPE входят элементы с именами alpha (буквы), digits (цифры) и т.п.
Как правило, значениями перечисленных переменных окружения являются абсолютные маршрутные имена файлов, содержащих соответствующие определения. Другой вариант (если значение не начинается с символа /) – имя среды.
Расширение XSI стандарта POSIX-2001 уточняет один из возможных форматов имени языково-культурной среды:
язык[_территория][.кодировка][@модификатор]
Примеры: ru_RU.koi8r, ru_UA.
Модификатор позволяет выбрать конкретный вариант данных о среде в пределах отдельной категории (скажем, словарный порядок сравнения в категории LC_COLLATE). Пример: LC_COLLATE=De_DE@dict.
В каждой реализации определены одна или несколько языковокультурных сред. Поддержка POSIX-среды с именами-синонимами «POSIX» и «C» является обязательной. Кроме того, возможно создание новых сред, если в системе определен конфигурационный параметр _POSIX2_LOCALEDEF.
Стандартом POSIX-2001 предусмотрены две «собирательные» переменные окружения, определяющие сразу все (или почти все) категории языково-культурной среды.
LC_ALL
Значение этой переменной окружения учитывается в первую очередь.
LANG
Значение этой переменной окружения учитывается в последнюю очередь, если не определены значения переменных вида LC_*.
В любой реализации некоторая среда (POSIX или иная) должна быть определена как подразумеваемая, т. е. используемая тогда, когда перечисленные выше переменные окружения не определены или имеют пустые значения. Это можно сделать, например, путем присваивания LANG=POSIX или LANG=C, после чего подразумеваемой станет POSIX-среда.
В структуре lconv, описанной во включаемом файле <locale.h>, содержатся поля, определяющие форматы денежных и числовых величин. Даже беглый взгляд на перечень этих полей позволяет составить представление о богатстве возможностей определения языково-культурной среды.
char *currency_symbol;
/* Местное обозначение  денежной величины  */

char *decimal_point;
/* Символ, отделяющий  целую часть         */
/* числа от дробной                        */

char frac_digits;
/* Количество цифр в дробной               */
/* части местных денежных величин          */

char *grouping;
/* Размеры групп цифр при                  */
/* форматировании чисел                    */

char *int_curr_symbol;
/* Международное обозначение денежной      */
/* величины                                */

char int_frac_digits;
/* Количество цифр в дробной части         */
/* международных денежных величин          */

char int_n_cs_precedes;
/* Признак того, что международное         */
/* обозначение предшествует отрицательной  */
/* денежной величине, а не следует за ней  */

char int_n_sep_by_space;
/* Признак того, что международное         */
/* обозначение отделяется от отрицательной */
/* денежной величины пробелом              */

char int_n_sign_posn;
/* Позиция знака минус в международных     */
/* обозначенияхотрицательных денежных      */
/* величин                                 */

char int_p_cs_precedes;
/* Признак того, что международное          */
/* обозначение предшествует неотрицательной */
/* денежной величине, а не следует за ней   */
/* */

char int_p_sep_by_space;
/* Признак того, что международное          */
/* обозначение отделяется от                */
/* неотрицательной денежной величины        */
/* пробелом                                 */

char int_p_sign_posn;
/* Позиция знака плюс в международных       */
/* обозначениях положительных денежных      */
/* величин                                  */

char *mon_decimal_point;
/* Символ, отделяющий целую часть денежной  */
/* величины от дробной                      */

char *mon_grouping;
/* Размеры групп цифр при форматировании    */
/* денежных величин                         */

char *mon_thousands_sep;
/* Символ, разделяющий группы цифр в        */
/* денежных величинах                       */

char *negative_sign;
/* Знак минус для отрицательных денежных    */
/* величин                                  */

char n_cs_precedes;
/* Признак того, что местное обозначение    */
/* предшествует отрицательной денежной      */
/* величине, а не следует за ней            */

char n_sep_by_space;
/* Признак того, что местное обозначение    */
/* отделяется от отрицательной денежной     */
/* величины пробелом                        */

char n_sign_posn;
/* Позиция знака минус в местных            */
/* обозначениях отрицательных денежных      */
/* величин                                  */

char *positive_sign;
/* Знак плюс для неотрицательных            */
/* денежных величин                         */

char p_cs_precedes;
/* Признак того, что местное обозначение    */
/* предшествует неотрицательной денежной    */
/* величине, а не следует за ней            */

char p_sep_by_space;
/* Признак того, что местное обозначение    */
/* отделяется от неотрицательной денежной   */
/* величины пробелом                        */

char p_sign_posn;
/* Позиция знака плюс в местных             */
/* обозначениях положительных денежных      */
/* величин                                  */

char *thousands_sep;
/* Символ, разделяющий группы цифр в        */
/* числовых величинах                       */
Стандарт POSIX-2001 регламентирует средства опроса и установки характеристик языково-культурной среды, а также опроса доступного набора таких сред.
Общая логика использования средств интернационализации/локализации такова: пользователь, присваивая соответствующие значения описанным выше переменным окружения, идентифицирует свою языково-культурную среду; приложения могут опросить данные о целевой среде с помощью функции setlocale() и произвести настройку интернационализированных компонентов.

http://localhost:3232/img/empty.gifhttp://localhost:3232/img/empty.gifОпределение языково-культурной среды

Определение языково-культурной среды помещается в файлы, к описанию формата которых мы и приступаем. Можно считать, что в подобных файлах, называемых далее файлами определения среды, содержится «исходный текст» определения, поскольку, чтобы возыметь действие, они должны быть обработаны утилитой localedef или эквивалентным средством.
Файл определения среды должен содержать определение одной или нескольких категорий, которое может сводиться к директиве copy (см. далее).
Определение категории состоит из заголовка, тела и хвостовика. Заголовок именует категорию; он должен начинаться с символов LC_. Хвостовик строится из слова END и имени, употребленного в качестве заголовка.
Первому заголовку могут предшествовать строки, переопределяющие символ комментария (по умолчанию – #) и управляющий символ (\).
Тело категории состоит из одной или нескольких строк, содержащих идентификатор и, возможно, следующие за ним операнды. В качестве идентификатора может выступать как ключевое слово, именующее отдельный элемент языково-культурной среды, так и элемент алфавитного сравнения символов. Ключевые слова должны быть уникальными в пределах среды и не начинаться с префикса LC_.
Операндами могут быть символы, элементы сравнения и цепочки символов. Цепочки символов заключаются в двойные кавычки, операнды разделяются точками с запятой и, возможно, пробелами.
Символы и элементы сравнения представляются определенными ниже именами. Кроме того, символы могут обозначаться естественным образом или кодами; правда, при этом определение языково-культурной среды теряет в мобильности.
Имена символов заключаются в угловые скобки (например, <A>, <z> и т.п.). Такая конструкция должна в точности совпадать с именем, определенным в файле отображения символов, который специфицирует опция -f утилиты localedef.
Реализация должна поддерживать по крайней мере один набор символов и соответствующий файл отображения. Любой набор должен включать в себя все элементы из так называемого мобильного набора символов, определяемого стандартом POSIX-2001 (их имена перечислены).
Файл отображения символов имеет довольно простую структуру. Если отвлечься от несущественных деталей, он должен состоять из директив вида

имя_символа> <код> <комментарий>
Эти директивы заключаются между строками
Эти директивы заключаются между строками
и
END CHARMAP
Перед строкой CHARMAP может располагаться определение имени набора символов, которое задается директивой

code_set_name> имя
Фрагмент возможного описания набора символов KOI8-R показан в.
Пример 13.1. Фрагмент файла отображения символов для кодировки KOI8-R.
Опишем теперь формат определения категорий языково-культурной среды.
Категория LC_CTYPE определяет классификацию символов, преобразование регистра и другие атрибуты. К ней относятся следующие ключевые слова: upper (прописные буквы; для POSIX-среды – 26 латинских букв верхнего регистра), lower (строчные буквы), alpha (буквы), digit (цифры), alnum (буквы и цифры), space (пробельные символы; для POSIX-среды в их число, помимо пробела, входят перевод строки, т абуляция и т.п.), cntrl (управляющие символы), punct (знаки пунктуации), graph (печатные символы за исключением пробела), print (печатные символы), xdigit (шестнадцатеричные цифры), blank (для POSIX-среды – пробел и табуляция).
С ключевым словом copy задается имя существующей среды, у которой наследуется определение категории. При наличии данной директивы другие ключевые слова недопустимы.
Ключевое слово charclass позволяет задать имена специфичных для определяемой среды классов символов. Каждый такой класс далее должен быть описан в определении категории LC_CTYPE по образу и подобию перечисленных выше стандартных классов.
Ключевое слово toupper открывает определение отображения малых букв в большие. Операнд этого слова представляет собой пару символов, заключенных в скобки и разделенных запятой. Аналогичным образом устроен элемент tolower.
В показано определение категории LC_CTYPE для POSIX-среды.
Пример 13.2. Определение категории LC_CTYPE для POSIX-среды.
http://localhost:3232/img/empty.gifКатегория LC_COLLATE определяет порядок алфавитного сравнения символов для многочисленных служебных программ (sort, uniq и т.д.), регулярных выражений, а также функций strcoll(), strxfrm() и других.
В алфавитном сравнении могут участвовать односимвольные и многосимвольные элементы. Их порядок задается весами, которых у каждого элемента может быть несколько (не более COLL_WEIGHTS_MAX). Первый вес называется основным. Если при сравнении элементов основные веса совпали, используются соответственные пары дополнительных – до тех пор, пока либо не будет обнаружено неравенство, либо не кончатся веса.
Допускается формирование классов эквивалентности – присвоение одного основного веса нескольким элементам сравнения. Поддерживаются также отображения один-ко-многим (один символ отображается в последовательность элементов сравнения).
Разумеется, сравнение цепочек символов начинается с разбиения на элементы сравнения.
Правила алфавитного сравнения и директивы присвоения весов открываются ключевым словом order_start и завершаются директивой order_end. Подразумеваемым правилом является forward – сравнение от начала к концу цепочки. Возможен и противоположный порядок (backward).
После строки order_start элементы сравнения перечисляются в порядке возрастания. После элемента может быть задана последовательность его весов. Веса задаются как относительные, в виде имен других элементов и определяются позицией этих элементов при перечислении. Специальный вес IGNORE означает, что данный элемент следует игнорировать при сравнении цепочек. Многоточие в качестве элемента сравнения обозначает диапазон от предыдущего до последующего элементов. Элемент UNDEFINED представляет все, что не было указано явно.
В POSIX-среде алфавитный порядок совпадает с упорядоченностью символов в кодировке ASCII.
Категория LC_MONETARY определяет формат денежных величин. Входящие в нее элементы именуются аналогично полям приведенной выше структуры lconv. Например, после ключевого слова currency_symbol задается цепочка символов, обозначающая местные денежные величины. Если ключевое слово данной категории отсутствует в файле определения среды либо его значением является пустая цепочка или -1, значит, соответствующий элемент в языково-культурной среде неспецифицирован.
В POSIX-среде все элементы этой категории остаются неспецифицированными.
В категории LC_NUMERIC, во многом аналогичной LC_MONETARY, определяются правила и обозначения, используемые применительно к числовым данным. Здесь также действует параллель со структурой lconv.
В показано определение категории LC_NUMERIC для POSIX-среды. Собственно, специфицируется только десятичная точка.
LC_NUMERIC
# POSIX-среда, категория LC_NUMERIC
#
decimal_point "<period>"
thousands_sep ""
grouping -1
#
END LC_NUMERIC
Пример 13.3. Определение категории LC_NUMERIC для POSIX-среды.
Элементы категории LC_TIME определяют интерпретацию спецификаторов преобразований и, тем самым, поведение служебной программы date, а также функций strftime(), strptime() и некоторых других. В число поддерживаемых ключевых слов входят abday (сокращенные названия дней недели, начиная с воскресенья; элемент соответствует спецификатору %a), day (полные названия дней недели, %A), abmon (сокращенные названия месяцев, %b), mon (полные названия месяцев, %B), d_t_fmt (принятое в данной языково-культурной среде представление даты и времени, %c), d_fmt (принятое в данной среде представление даты, %x), t_fmt (принятое в данной среде представление времени, %X).
Особым образом устроен элемент era, определяющий способ отсчета и отображения лет для каждой эры, поддерживаемой языково-культурной средой. Операнд ключевого слова era состоит из цепочек символов, каждая из которых описывает конкретную эру и имеет следующий формат:
направление:смещение:начальная_дата:
конечная_дата:имя_эры:формат_эры
Здесь направление – знак плюс или минус, смещение – ближайший к начальной дате номер года, начальная_дата – цепочка вида гггг/мм/дд (год, месяц и число начала эры), конечная_дата – год, месяц и число конца эры либо цепочки «-*» (конечной датой служит начало отсчета времени) или «+*» (конечной датой служит конец отсчета времени), формат_эры – цепочка, используемая при форматировании номеров года в эре.
Отметим, что точка отсчета может быть как самой ранней, так и самой поздней в эре. Примерами служат две христианские эры – после и до Рождества Христова, соответственно.
В показано определение категории LC_TIME для POSIX-среды.
Пример 13.4. Определение категории LC_TIME для POSIX-среды.
Категория LC_MESSAGES играет весьма ограниченную роль, определяя положительные и отрицательные ответы. Соответственно, она содержит два элемента – yesexpr и noexpr, значениями которых служат расширенные регулярные выражения. Для POSIX-среды данная категория описывается так, как показано в.
LC_MESSAGES
# POSIX-среда, категория LC_MESSAGES
#
yesexpr "<circumflex><left-square-bracket>\
<y><Y><right-square-bracket>"
#
noexpr "<circumflex><left-square-bracket>\
<n><N><right-square-bracket>"
#
END LC_MESSAGES
Пример 13.5. Определение категории LC_MESSAGES для POSIX-среды.
Создание и опрос характеристик языково-культурной среды
Для создания целевой языково-культурной среды служит утилита localedef:
localedef [-c] [-f файл_отображения_символов]
[-i исходный_файл]
[-u имя_набора_символов]
имя_целевой_среды
Утилита localedef преобразует рассмотренное выше определение категорий языково-культурной среды из исходного формата в целевой, пригодный для использования функциями и служебными программами, поведение которых зависит от значений переменных окружения.
Исходные данные для localedef поступают из файла с именем операнда опции -i или со стандартного ввода.
Операнд имя_целевой_среды определяет имя создаваемой среды. Она может быть как общедоступной, так и приватной, с ограниченным доступом.
Аргументом опции -f является маршрутное имя файла отображения символов. После опции -u можно задать имя нестандартного набора символов.
Опция -c предписывает генерировать выходной файл даже при наличии предупреждений.
Аргумент имя_целевой_среды идентифицирует созданную языково-культурную среду. Если это имя начинается с символа /, оно интерпретируется как маршрутное имя, под которым сохраняется сгенерированное определение целевой среды (формат результатов работы localedef стандартом не специфицируется); в противном случае интерпретация имени зависит от реализации, а созданная среда становится общедоступной.
Для получения информации о языково-культурных средах предназначена служебная программа locale:
locale [-a | -m]
locale [-ck] имя ...
Будучи вызванной без аргументов, утилита locale выдает на стандартный вывод сводную информацию о среде, которая состоит из значений соответствующих переменных окружения (описанных выше, а также дополнительных, определенных, быть может, целевой системой). Результат может выглядеть так, как показано в. Кавычки вокруг значений всех переменных окружения, кроме 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
могут выглядеть так, как показано в.
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-процедуры.
Программная установка и опрос характеристик языково-культурной среды
Мы приступаем к рассмотрению функций, предназначенных для работы с языково-культурной средой.
Функция setlocale() служит для установки и/или опроса всей языково-культурной среды вызывающего процесса или отдельных категорий.
#include <locale.h>
char *setlocale (int category,
const char *locale);
Пример 13.9. Описание функции setlocale().
Аргумент category задает категорию (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME), а если его значение равно LC_ALL, то и всю среду.
Аргумент locale указывает на цепочку символов, содержащую требуемые установки для выбранной категории (категорий); в общем случае ее формат зависит от реализации. Имеется, однако, несколько предопределенных, стандартизованных цепочек.
"POSIX" или "C"
Специфицирует минимальную языково-культурную среду (POSIX-среду) для C-программ. При отсутствии явных обращений к функции setlocale() такая среда устанавливается по умолчанию при входе в main().
""
Специфицирует зависящую от реализации местную языково-культурную среду, определяемую значениями переменных окружения LC_* и LANG. Интернационализированная программа должна выполнять вызов вида
setlocale (LC_ALL, "");
для настройки на местную среду выполнения.
Если значением аргумента locale служит пустой указатель, функция setlocale() опрашивает текущее окружение и возвращает имя используемой языково-культурной среды или цепочку символов, ассоциированную с выбранной категорией. В противном случае в качестве результата возвращаются те же характеристики, но для новой среды. Результирующая цепочка (скопированная в отведенную прикладной программой область памяти) в сочетании с заданной категорией может быть использована в последующих вызовах функции setlocale() для восстановления соответствующей части языково-культурной среды.
Разумеется, в случае неудачного завершения вызова setlocale() результатом служит пустой указатель.
Получить детальную информацию о категориях LC_MONETARY и LC_NUMERIC текущей языково-культурной среды можно с помощью функции localeconv().
#include <locale.h>
struct lconv *localeconv (void);
Пример 13.10. Описание функции localeconv().
Структура типа lconv была описана выше. Здесь мы отметим лишь два момента.
Поля, имеющие тип char *, указывают на цепочки символов, каждая из которых (за исключением *decimal_point) может иметь вид "" как признак того, что данное значение в текущей среде недоступно или имеет нулевую длину.
Поля типа char содержат неотрицательные числа; CHAR_MAX указывает на то, что данное значение в текущей среде недоступно.
Вызов localeconv() не может кончиться неудачей, однако следует учитывать, что возвращаемая структура может быть перезаписана последующими обращениями не только к localeconv(), но и к setlocale().
Следующая программа демонстрирует использование функций setlocale() и localeconv().
Пример 13.11. Пример использования функций setlocale() и localeconv().
Возможный результат работы этой программы показан в.
Пример 13.12. Возможный результат работы программы, использующей функции setlocale() и localeconv().
Для преобразования денежных величин в цепочку символов в соответствии с настройками текущей языково-культурной среды можно воспользоваться функцией strfmon(), входящей в XSI-расширение стандарта POSIX-2001.
#include <monetary.h>
ssize_t strfmon (char *restrict s,
size_t maxsize,
const char *restrict format, ...);
Пример 13.13. Описание функции strfmon().
Результат преобразования (длиной не более maxsize байт) помещается в буфер, на который указывает аргумент s. Само преобразование выполняется под управлением аргумента format. В формат могут входить обычные символы, просто копируемые в выходную цепочку, а также спецификаторы преобразований – под их воздействием производится извлечение и вывод дополнительных аргументов.
Спецификатор преобразования в общем случае состоит из следующих компонентов:

  • символ %;
  • флаги;
  • ширина поля;
  • число символов в целой части;
  • число символов в дробной части;
  • символ, задающий преобразование.

Обязательными являются только первый и последний компоненты. Возможных преобразований два:
i
Преобразовать значение типа double в денежную величину международного формата.
n
Преобразовать значение типа double в денежную величину местного формата.
В качестве результата функция strfmon() возвращает количество байт, помещенное в массив s.
Может показаться, что в деле интернационализации/локализации категориям LC_MONETARY и LC_NUMERIC повезло больше других, поскольку для них определена многокомпонентная структура lconv, содержащая значения всех ключевых слов этих категорий, и функция localeconv(), позволяющая данную структуру получить. Однако на практике дело обстоит прямо противоположным образом. Для других категорий настройка приложений на местную языково-культурную среду сводится к вызову
setlocale (LC_ALL, "");
Всю остальную специфику среды учитывают функции isalpha(), tolower(), strcoll(), strftime() и т.д., которыми приложения могут пользоваться стандартными способами.
В показан пример программы, использующей упомянутые функции. Видно, как меняется их поведение при модификации языково-культурной среды.
Пример 13.14. Пример программы, работающей в нескольких языково-культурных средах.
Текущая языково-культурная среда: подразумеваемая
isalpha ('Б'): 0
tolower ('Б'): 'Б'
Результат преобразования в денежную величину
числа 1234.567
Международное обозначение: 1234.57
Местное обозначение: 1234.57
Текущая языково-культурная среда: местная
isalpha ('Б'): 1024
tolower ('Б'): 'б'
Результат преобразования в денежную величину
числа 1234.567
Международное обозначение: 1 234.57 RUR
Местное обозначение: 1 234.57 руб
Категория LC_MONETARY переустановлена для
Украины
Результат преобразования в денежную величину
числа 1234.567
Международное обозначение: 1 234.57 UAH
Местное обозначение: 1 234.57 ГР
Пример 13.15. Текущая языково-культурная среда: подразумеваемая
Если требуется получить детальную информацию обо всех аспектах языково-культурной среды, можно воспользоваться функцией nl_langinfo(), отнесенной стандартом POSIX-2001 к расширению XSI.

 

 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г.Яндекс.Метрика