Locale (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
Locale
. Дата последней синхронизации: 2022-04-03. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Переменные окружения
Локализация
Локали
определяют язык, который использует система, а также региональные особенности, такие как денежные знаки, формат чисел, даты и времени и наборы символов. Они используются
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-gen
также запускается каждый раз при обновлении
glibc
.
[1]
UTF-8
предпочтительнее других кодировок.
[2]
Установка локали
Чтобы отобразить текущую локаль и связанные с ней переменные окружения, наберите:
$ 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
, вы можете просто сохранить его в файл командой
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
Note
Многие приложения не называют свою английскую локаль или псевдоним как
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
.
Примечание
Программы не всегда учитывают указанный здесь формат даты. Например,
date(1)
использует свои собственные параметры, а
Firefox
не учитывал
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.