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

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

Шрифт:

It is now Friday, July 11, 2003, 10:35 AM

ctime says: Fri Jul 11 10:35:55 2003

$ LC_ALL=it_IT ch13-times /* Время в Италии */

It is now venerdi, luglio 11, 2003, 10:36

ctime says: Fri Jul 11 10:36:00 2003

$ LC_ALL=fr_FR ch13-times /* Время во Франции */

It is now vendredi, juillet 11, 2003, 10:36

ctime says: Fri Jul 11 10:36:05 2003

Причина отсутствия изменений в том, что

ctime
(и
asctime
, на которой основана
ctime
) является традиционным интерфейсом; он существует для поддержки старого кода,
strftime
, будучи более новым интерфейсом (первоначально разработанным для C89), свободен использовать локали.

13.2.8. Другие данные локали:

nl_langinfo

Хотя ранее мы сказали, что API

catgets
трудно использовать, одна часть этого API обычно полезна:
nl_langinfo
. Она предоставляет дополнительные связанные с локалью сведения, помимо тех, которые доступны из
struct lconv
:

#include <nl_types.h>

#include <langinfo.h>

char *nl_langinfo(nl_item item);

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

<nl_types.h>
определяет тип
nl_item
. (Это скорее всего
int
или
enum
.) Параметр
item
является одной из именованных констант, определенных в
<langinfo.h>
. Возвращаемое значение является строкой, которую можно при необходимости использовать либо непосредственно, либо в качестве форматирующей строки для
strftime
.

Доступная информация поступает из нескольких категорий локали. В табл. 13.3 перечислены константы элементов, соответствующие категории локали и их значения.

Таблица 13.3. Значения элементов для

nl_langinfo

Элемент Категория Значение
ABDAY_1
, …,
ABDAY_7
LC_TIME
Сокращенные названия дней недели. Воскресенье является днем 1
ABMON_1
, …,
ABMON_12
LC_TIME
Сокращенные названия месяцев
ALT_DIGITS
LC_TIME
Альтернативные символы для цифр; см. текст
AM_STR
,
PM_STR
LC_TIME
Обозначения a.m/p.m. для локали.
CODESET
LC_TYPE
Имя кодовой страницы для локали, т.е. использующиеся набор символов и кодировка
CRNCYSTR
LC_MONETARY
Символ местной валюты, описанный ниже
DAY_1
, …,
DAY_7
LC_TIME
Названия дней недели. Воскресенье является днем 1
D_FMT
LC_TIME
Формат даты
D_T_FMT
LC_TIME
Формат даты и времени
ERA_D_FMT
LC_TIME
Формат даты эры.
ERA_D_T_FMT
LC_TIME
Формат даты и времени эры.
ERA_T_FMT
LC_TIME
Формат времени эры.
ERA
LC_TIME
Сегменты описания эры, см. текст.
MON_1
, …,
MON_12
LC_TIME
Названия месяцев.
RADIXCHAR
LC_NUMERIC
Символ системы счисления. Для базы 10 это символ точки в десятичной дроби.
THOUSEP
LC_NUMERIC
Символ-разделитель тысяч
T_FMT_AMPM
LC_TIME
Формат времени в записи a.m/p.m.
T_FMT
LC_TIME
Формат времени.
YESEXPR
,
NOEXPR
LC_MESSAGES
Строка, представляющая положительный и отрицательный ответы.

Эра является определенным временем в истории. Поскольку она имеет отношение к датам и временам, она имеет наибольший смысл в странах, управляемых императорами и династиями. [144]

Спецификации эр POSIX могут определять эры ранее 1 г. н.э. В таких случаях у начальной даты большее абсолютное числовое значение, чем у конечной даты. Например, Александр Великий правил с 336 г. до н.э. по 323 г до н.э.

Значение, возвращенное '

nl_langinfo(ERA)
', если оно не равно
NULL
, состоит из одной или более спецификаций эр. Каждая спецификация отделена от следующей символом '
;
'. Компоненты спецификации каждой эры отделяются друг от друга символом '
:
'. Компоненты описаны в табл. 13.4.

144

Хотя американцы часто ссылаются на эры определенных президентов, они не являются частью национального календаря в том же смысле, как в Японии до Второй мировой войны или в докоммунистическом Китае — Примеч. автора.

Таблица 13.4. Компоненты спецификации эры

Компонент Значение
Направление Символы '
+
' или '
–
'. '
+
' означает, что эра отсчитывается от численно меньшего года к численно большему году, а '
–
' означает обратный порядок
Смешение Ближайший к дате начала эры год
Дата начала Дата начала эры в виде 'гггг/мм/дд'. Это соответственно год, месяц и день. Годы до н.э используют для гггг отрицательные значения
Дата конца Дата завершения эры в том же самом виде. Допустимы два дополнительных вида:
– *
означает «начало времени», а
+*
означает «конец времени»
Название эры Название эры, соответствующее спецификации преобразования
%EC
функции
strftime
Формат эры Формат года в пределах эры, соответствующий спецификации преобразования
%EY
функции
strftime

Значение

ALT_DIGITS
также нуждается в некотором объяснении. Некоторые локали предоставляют «альтернативные цифры». (Рассмотрите арабский язык, в котором используется десятичная система счисления, но изображения для цифр 0–9 другие. Или рассмотрите гипотетическую локаль «Древнего Рима», использующую римские цифры.) Они появляются, например, в различных спецификациях преобразования
%OC
в функции
strftime
. Возвращаемое значение для '
nl_langinfo(ALT_DIGITS)
' является разделяемым точками с запятой списком строк символов для альтернативных цифр. Первая должна использоваться для 0, следующая для 1 и т.д. POSIX утверждает, что могут быть предоставлены до 100 альтернативных символов. Сущность в том, чтобы избежать ограничения локалей использованием символов цифр ASCII, когда у локали есть собственная система счисления.

Наконец, '

nl_langinfo(CRNCYSTR)
' возвращает символ местной валюты. Первый символ возвращаемого значения, если это '
–
', '
+
' или '
.
', указывает, как должен использоваться символ:

–  
Символ должен быть перед значением.

+ 
Символ должен быть после значения.

. 
Символ должен заменить символ основания (разделитель десятичной дроби).

13.3. Динамический перевод сообщений программ

  • Читать дальше
  • 1
  • ...
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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