Locale (Русский)
Локали определяют язык, который использует система, а также региональные особенности, такие как денежные знаки, формат чисел, даты и времени и наборы символов. Они используются glibc и некоторыми другими программами или библиотеками для рендеринга текста.
Генерирование локалей
Имена локалей обычно имеют вид [язык][_ТЕРРИТОРИЯ][.НАБОР_СИМВОЛОВ][@модификатор]
, где язык это код языка ISO 639, ТЕРРИТОРИЯ это код страны ISO 3166 и НАБОР_СИМВОЛОВ это кодировка вроде ISO-8859-1 или UTF-8. Смотрите setlocale(3).
Чтобы вывести список всех доступных и сгенерированных локалей, выполните:
$ locale -a
Перед тем, как локаль сможет быть использована в системе, она должна быть сгенерирована. Локали, которые вы можете сгенерировать перечислены в файле /etc/locale.gen
. Чтобы сгенерировать локаль, первым делом раскомментируйте соответствующую строку в файле (а для удаления наоборот, закомментируйте); вы можете раскомментировать несколько локалей, в зависимости от ваших потребностей.
Например, для русской локали раскомментируйте ru_RU.UTF-8 UTF-8
:
/etc/locale.gen
... #ro_RO ISO-8859-2 #ru_RU.KOI8-R KOI8-R ru_RU.UTF-8 UTF-8 #ru_RU ISO-8859-5 #ru_UA.UTF-8 UTF-8 ...
После сохранения файла сгенерируйте выбранные локали командой:
# locale-gen
Установка локали
Чтобы отобразить текущую локаль и связанные с ней переменные окружения, наберите:
$ locale
Используемая локаль, выбранная среди сгенерированных в системе, устанавливается в файлах locale.conf
, каждый из которых должен содержать список переменных окружения в том же формате, в каком их выводит команда locale.
Чтобы посмотреть список доступных ранее сгенерированных локалей, выполните:
$ localedef --list-archive
Также можно использовать localectl(1):
$ localectl list-locales
Установка системной локали
- Системная локаль устанавливается с помощью переменной
LANG
в файле/etc/locale.conf
. Значением должен быть первый столбец из раскомментированной записи в/etc/locale.gen
:
/etc/locale.conf
LANG=ru_RU.UTF-8
Вы можете установить ее также при помощи localectl:
# localectl set-locale LANG=ru_RU.UTF-8
Подробнее смотрите #Переменные окружения and locale.conf(5).
locale > /etc/locale.conf
(в сеансе arch-chroot).Переопределение системной локали в пользовательском сеансе
- Системная локаль может переопределяться в каждом пользовательском сеансе с помощью файла
~/.config/locale.conf
(обычно~/$XDG_CONFIG_HOME/locale.conf
).
- Совет:
- Это позволяет вести системные логи в
/var/log/
на английском, при использовании местного языке в рабочей среде пользователя. - Вы можете создать файл
/etc/skel/.config/locale.conf
, тогда для всех новых пользователей, добавленных командой useradd с опцией-m
сразу будет автоматически сгенерирован файл~/.config/locale.conf
.
- Это позволяет вести системные логи в
Немедленное применение изменений локали
После внесения изменений в файлы locale.conf
, они вступят в силу после перезагрузки системы, и для отдельных сеансов пользователей — при входе. Чтобы принудительно обновить локаль в текущем окружении без перезагрузки, выполните:
$ unset LANG $ source /etc/profile.d/locale.sh
LANG
нужно обязательно сбросить, иначе locale.sh
не обновит значения из locale.conf
. Будут обновлены только новые и изменённые переменные; те же, что были удалены из файла locale.conf
, по-прежнему останутся в текущем сеансе.Дополнительно
Переменные окружения настроек локали могут также быть установлены обычным способом, как указано на странице переменные окружения.
Например, чтобы проверить, как работает конкретное приложение с какой-нибудь локалью, вы можете запустить его следующим образом:
$ LANG=С ./my_application.sh
Аналогично, для установки локали всем процессам, запускаемом из текущей командной оболочки (например, в процессе установки системы):
$ export LANG=C
Переменные окружения
Файлы locale.conf
могут содержать следующие переменные окружения:
- LANG
- LANGUAGE
LC_ADDRESS
- LC_COLLATE
LC_CTYPE
LC_IDENTIFICATION
LC_MEASUREMENT
LC_MESSAGES
LC_MONETARY
LC_NAME
LC_NUMERIC
LC_PAPER
LC_TELEPHONE
- LC_TIME
Полное объяснение этих переменных можно узнать в locale(7), детали описаны в locale(5).
LANG: локаль по умолчанию
Локаль, установленная в этой переменной используется в качестве значения для всех остальных LC_*
-переменных, которые не установлены явно.
LANG
в значение es_ES.UTF-8
и переменную LC_MESSAGES
в en_US.UTF-8
.LANGUAGE: запасные локали
Программы, использующие gettext для перевода, учитывают также переменную LANGUAGE
в дополнение к стандартным переменным. Это позволяет пользователям установить список локалей, которые будут использоваться в указанном порядке для поиска перевода. Если перевод для более предпочтительной локали (которая идет раньше в списке) недоступен, будет произведена попытка получить перевод для следующей, и так далее. Например, пользователь из Австралии может предпочесть британский вариант перевода американскому:
locale.conf
LANG=en_AU LANGUAGE=en_AU:en_GB:en
en
или en_US
, а вместо этого делают ее локалью по умолчанию, то есть C
. Если в LANGUAGE
после английского указывается неанглийская локаль, например LANGUAGE=en_US:en:es_ES
, то приложения могут выбрать дополнительную локаль, несмотря на наличие английских строк.[3] Решение состоит в том, чтобы всегда явно указывать локаль C
после английского. Например, LANGUAGE=en_US:en:C:es_ES
.LC_TIME: формат даты и времени
Например, если переменная LC_TIME
имеет значение en_US.UTF-8
, будет использован формат даты ММ/ДД/ГГГГ
. Если вы хотите использовать формат ISO 8601 (ГГГГ-ММ-ДД
), установите:
locale.conf
LC_TIME=en_DK.UTF-8
Вы можете распечатать текущую метку времени, используя формат даты и времени вашего региона с помощью date +"%c"
.
glibc 2.29 исправляет ошибку, en_US.UTF-8
начал отображаться в 12-часовом формате, как и предполагалось. Если вы хотите использовать 24-часовой формат, используйте LC_TIME=C.UTF-8
.
LC_TIME
в версиях 57-84 (Bug 1429578).LC_COLLATE: порядок сортировки
Эта переменная отвечает за правила определения сравнения наборов символов, которые используются для сортировки и регулярных выражений.
Установка значения LC_COLLATE=C
, например, приведет к тому, что команда ls будет располагать файлы, имена которых начинаются с точки, первыми, за ними последуют имена, начинающиеся с цифры, затем с заглавной и, наконец, со строчной буквы:
/etc/locale.conf
LC_COLLATE=C
Смотрите также https://superuser.com/a/448294.
Чтобы избежать возможных проблем, в Arch переменная установлена как LC_COLLATE=C
в /etc/profile
, однако этот метод сейчас устарел.
LC_ALL: решение проблем
Переменная LC_ALL
переопределяет своим значением все LC_*
-переменные, включая LANG
, независимо от того, установлены они или нет.
Переменная LC_ALL
— единственная из всех LC_
-переменных, которую нельзя установить в /etc/locale.conf
: она предназначена только в целях проверки при решении проблем.
Советы и рекомендации
Запуск приложения с другой локалью в терминале
Например, чтобы запустить программу abiword на иврите:
# env LANG=he_IL.UTF-8 abiword &
Запуск приложения с другой локалью из меню
Скопируйте файл .desktop в домашний каталог пользователя:
$ cp /usr/share/applications/abiword.desktop ~/.local/share/applications/
И отредактируйте команду в опции Exec
:
~/.local/share/applications/abiword.desktop
Exec=env LANG=he_IL.UTF-8 abiword %U
Решение проблем
Эмулятор терминала не поддерживает UTF-8
Небольшой список терминалов с поддержкой UTF-8:
- gnustep-terminal
- konsole
- mlterm
- rxvt-unicode (Русский)
- st
- эмуляторы на основе VTE
- xterm — необходимо запускать с опцией
-u8
или с настройкойxterm*utf8: 2
. Также вы можете запускать uxterm, который предоставляется пакетом xterm.
gnome-terminal или rxvt-unicode не поддерживают UTF-8
Чтобы заработала поддержка UTF-8 в этих приложениях, необходимо запускать их с локалью, в которой установлена кодировка UTF-8, например ru_RU.UTF-8
. Включите эту локаль в системе, установите ее как системную локаль по умолчанию в соответствиями с инструкциями в предыдущих разделах и перезагрузите компьютер.
Моя система использует неверный язык
Возможно, некоторые переменные окружения из locale.conf
. Подробнее смотрите на странице Переменные окружения#Установка переменных.
Если вы используете окружение рабочего стола, такое как GNOME, его настройки могут перекрывать locale.conf
.
KDE Plasma также позволяет изменить язык интерфейса через свои настройки. Если он всё равно использует язык по умолчанию после изменения, удаление файла ~/.config/plasma-localerc
(ранее ~/.config/plasma-locale-settings.sh
) должно помочь.
Если вы используете экранный менеджер вместе с accountsservice, смотрите Display manager (Русский)#Установка языка.
LightDM автоматически использует accountsservice для выбора локали, если он установлен. В противном случае LightDM читает настройки сеанса из ~/.dmrc
. Возможно, что нежелательные настройки локали прочитались оттуда.
Смотрите также
- Руководство по локализации Gentoo Linux
- http://wikigentoo.ksiezyc.pl/Locales.htm[устаревшая ссылка 2023-05-06 ⓘ]
- Интерактивная проверка сортировки от ICU
- Инициатива Free Standards Group создания открытого стандарта интернационализации
- О локалях в The Single UNIX Specification от The Open Group
- Переменные окружения для настройки локали на Ubuntu Help.