Выбрать главу

std offset [dst [offset][, start-date [/time], end-date [/time]]]

Пробелы включены в показанную выше строку для удобства чтения, но в значении TZ их быть не должно. Квадратные скобки ([]) используются для обозначения необязательных компонентов. Компоненты std и dst — это строки, показывающие стандартный часовой пояс и часовой пояс с учетом действия режима летнего времени; например CET и CEST для центральноевропейского времени и центральноевропейского летнего времени. Смещение offset в каждом случае указывается положительным или отрицательным корректировочным значением, которое прибавляется к местному времени для его преобразования во время UTC. Последние четыре компонента предоставляют правило, описывающее период перехода со стандартного на летнее время.

Даты могут указываться в разных формах, одной из которых является Mm.n.d. Эта запись означает день d (0 = воскресенье, 6 = суббота) недели n (от 1 до 5, где 5 всегда означает последний d день) месяца m (от 1 до 12). Если время опущено, его значение в любом случае устанавливается по умолчанию на 02:00:00 (2 AM).

Определить TZ для Центральной Европы, где стандартное время на час опережает UTC и режим летнего времени (DST) вводится с последнего воскресенья марта до последнего воскресенья октября, а местное время опережает UTC на два часа, можно следующим образом:

TZ="CET-1:00:0 °CEST-2:00:00,M3.5.0,M10.5.0"

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

TZ=":Europe/Berlin"

10.4. Локали

В мире говорят на нескольких тысячах языков, существенная часть которых постоянно используется в компьютерных системах. Кроме того, в разных странах есть разные соглашения для отображения такой информации, как числа, денежные суммы, даты и показания времени. Например, в большинстве европейских стран для отделения целой части от дробной в действительных числах используется запятая, а не точка и в большинстве стран используются форматы для записи дат, отличающиеся от формата MM/DD/YY, принятого в США. В SUSv3 локаль характеризуется как «подмножество переменных пользовательской среды, которые зависят от языковых и культурных норм».

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

Термин «интернационализация» (internationalization) часто записывается в виде i18N, то есть в виде I плюс 18 букв плюс N. Кроме того, что в таком виде это слово записывается быстрее, данная запись устраняет различия в его написании, существующие в английском и американском вариантах английского языка.

Определения локали

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

Информации о локали содержится в иерархии каталогов, которая находится в каталоге /usr/share/locale (или в некоторых дистрибутивах в каталоге /usr/lib/locale). Каждый имеющийся в этом каталоге подкаталог хранит информацию о конкретном месте (в географическом смысле). Эти каталоги называются с использованием следующего соглашения:

language[_territory[.codeset]][@modifier]

В качестве language используется двухбуквенный код языка по стандарту ISO, а в качестве territory — двухбуквенный код страны по стандарту ISO. Компонент codeset обозначает кодировку символов. Компонент modifier предоставляет средства, позволяющие отличить друг от друга несколько каталогов с локалями, чьи языки, территории и кодировки символов совпадают. Примером полного имени каталога с локалями может служить de_DE.utf-8@euro, которое соответствует следующим региональным настройкам: немецкий язык, Германия, кодировка символов UTF-8, в качестве денежного знака используется евро.