Чтение онлайн

на главную

Жанры

Linux программирование в примерах
Шрифт:

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

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. Динамический перевод сообщений программ

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

Однако, большая часть взаимодействия пользователя с текстовой программой осуществляется в виде выводимых сообщений, таких, как приглашения или сообщения об ошибках. Проблема заключается в необходимости избежания множества версий одной и той же программы, которые отличаются лишь содержанием строк сообщений. Решением де-факто в мире GNU является GNU

gettext
. (GNU программы сталкиваются с подобными проблемами с элементами меню; обычно у каждого большого инструментария пользовательского интерфейса свой способ решения этой проблемы.)

GNU

gettext
дает возможность перевода сообщений программы на другие языки во время исполнения. Внутри кода программы этот перевод включает несколько шагов, каждый из которых использует свои библиотечные функции. Когда сама программа должным образом подготовлена, несколько утилит на уровне оболочки дают возможность подготовить переводы на другие языки. Каждый такой перевод называется списком сообщений (message catalog).

13.3.1. Установка текстового домена:

textdomain

Законченное приложение может содержать множество компонентов: отдельные исполняемые файлы, написанные на С или C++ или на языках сценариев, которые также могут получить доступ к возможностям

gettext
, таких, как
gawk
или оболочка Bash Все компоненты приложения разделяют один и тот же текстовый домен, который является строкой, уникально идентифицирующей приложение. (Примерами могут быть «
gawk
» или «
coreutils
»; первое является простой программой, а последнее — целым набором программ.) Текстовый домен устанавливается функцией
textdomain
:

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

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Черный Маг Императора 10

Герда Александр
10. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 10

Академия

Сай Ярослав
2. Медорфенов
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Академия

Шведский стол

Ланцов Михаил Алексеевич
3. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Шведский стол

Болотник

Панченко Андрей Алексеевич
1. Болотник
Фантастика:
попаданцы
альтернативная история
6.50
рейтинг книги
Болотник

Свои чужие

Джокер Ольга
2. Не родные
Любовные романы:
современные любовные романы
6.71
рейтинг книги
Свои чужие

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Кодекс Охотника. Книга XIII

Винокуров Юрий
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XIII

Черный дембель. Часть 5

Федин Андрей Анатольевич
5. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 5

Невеста на откуп

Белецкая Наталья
2. Невеста на откуп
Фантастика:
фэнтези
5.83
рейтинг книги
Невеста на откуп

Совершенный: охота

Vector
3. Совершенный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Совершенный: охота

Никто и звать никак

Ром Полина
Фантастика:
фэнтези
7.18
рейтинг книги
Никто и звать никак

Третье правило дворянина

Герда Александр
3. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Третье правило дворянина

Убивать чтобы жить 2

Бор Жорж
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 2