В началоLinux не для идиотов → Локализация
Gentoo-doc HOME Пред.: X11 и все-все-всеВ началоУровень выше: Linux не для идиотовСлед.: Менеджер пакетов и зависимости

20. Локализация

Широкое распространение UNIX-систем привело к необходимости введения системы локализации – поддержки предпочитаемых пользователем стандартов на запись даты и времени, формата чисел, языка сообщения программ, обозначений национальной валюты и так далее.

В Linux стандартом на методику локализации является спецификация i18n. Не вдаваясь в подробности, мы попытаемся получить некоторое представление о том как это выглядит для пользователя.

Как конечные пользователи, мы можем ознакомиться с текущими настройками своей локали используя команду locale:

$ locale 
LANG=ru_RU.UTF-8 
LC_CTYPE="ru_RU.UTF-8" 
LC_NUMERIC="ru_RU.UTF-8" 
LC_TIME="ru_RU.UTF-8" 
LC_COLLATE="ru_RU.UTF-8" 
LC_MONETARY="ru_RU.UTF-8" 
LC_MESSAGES=en_US 
LC_PAPER="ru_RU.UTF-8" 
LC_NAME="ru_RU.UTF-8" 
LC_ADDRESS="ru_RU.UTF-8" 
LC_TELEPHONE="ru_RU.UTF-8" 
LC_MEASUREMENT="ru_RU.UTF-8" 
LC_IDENTIFICATION="ru_RU.UTF-8"

На самом деле, программа locale в корректно настроенной системе просто выведет вам значение соответствующих переменных окружения. Каждая из этих переменных отвечает за свой собственный аспект локализации, перечислим наиболее важные:

LANG – локаль по умолчанию, ее значение для различных аспектов может быть перекрыто путем установки отдельных переменных в нужное вам значение

LC_CTYPE – отвечает за классификацию символов и различия в их регистре

LC_NUMERIC – отвечает за представление и форматирование чисел

LC_TIME – отвечает за формат даты

LC_COLLATE – определяет настройки сравнения строк и символов, влияет на сортировку

LC_MONETARY – отвечает за представление национальной валюты

LC_MESSAGES – определяет язык сообщений и интерфейса

В примере мы видим что локалью по умолчанию через переменную LANG выбрана локаль ru_RU.UTF-8 (русский язык, соответствие российским стандартам, кодировка символов UTF-8), а в качестве языка интерфейса назначен английский язык в варианте используемом в США. Фактически это означает что все программы будут иметь английский интерфейс, но показывать дату, валюту, десятичную точку и сортировать строки они должны так как это принято в России.

В отличие от мира Windows, где язык сообщений программы как правило жестко забит в ресурсах, а ресурсы включены в исполняемый файл, в UNIX и Linux сообщения как правило содержатся в отдельных файлах и программа загружает текстовые строки для сообщений интерфейса основываясь на значениях переменных LANG и LC_MESSAGES. Это дает возможность обеспечить работу пользователей из разных стран на привычных им языках, не прибегая к установке нескольких копий операционной системы или нескольких экземпляров программы, каждый для своего языка.

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

Более того – можно установить значение некоторых переменных окружения в нужные значения непосредственно перед запуском программы – и тогда эта программа примет будет использовать указанные настройки локали только для этого запуска, например:

$ LC_MESSAGES=ru_RU.UTF-8 ls -l something 
ls: невозможно получить доступ к something: Нет такого файла или каталога 
$ LC_MESSAGES=en_US.UTF-8 ls -l something 
ls: cannot access something: No such file or directory 
$ LC_MESSAGES=fr_CA.UTF-8 ls -l something 
ls: ne peut accéder something: Aucun fichier ou répertoire de ce type

Таким образом, в Linux-системе возможно обеспечить одновременную работу пользоваетелей в разных языковых окружениях, изменяя только изменение значений переменных окружения. В системах RedHat/Fedora общесистемные настройки локали хранятся в файле /etc/sysconfig/i18n, а пользователь может самостоятельно перекрыть их путем записи соответствующих значений в файле ~/.i18n:

$ cat /etc/sysconfig/i18n
LANG="ru_RU.UTF-8" 
SYSFONT="latarcyrheb-sun16" 
$ cat /homed/viking/.i18n
LC_MESSAGES="en_US"

В данном примере системная локаль ru_RU.UTF-8, но пользователь viking предпочитает работать в англоязычном интерфейсе, что и записал в своем персональном файле настроек локали.

Пред.: X11 и все-все-всеВ началоУровень выше: Linux не для идиотовСлед.: Менеджер пакетов и зависимости
В началоLinux не для идиотов → Локализация