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_CTYPELC_IDENTIFICATIONLC_MEASUREMENTLC_MESSAGESLC_MONETARYLC_NAMELC_NUMERICLC_PAPERLC_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.