Locale (Русский)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

Генерирование локалей

Перед тем, как локаль сможет быть использована в системе, она должна быть сгенерирована. Чтобы вывести список всех доступных и сгенерированных локалей, выполните:

$ locale -a

Локали, которые вы можете сгенерировать перечислены в файле /etc/locale.gen: их имена заданы в формате [язык][_ТЕРРИТОРИЯ][.НАБОР_СИМВОЛОВ][@модификатор]. Чтобы сгенерировать локаль, первым делом раскомментируйте соответствующую строку в файле (а для удаления наоборот, закомментируйте); вы можете раскомментировать несколько локалей, в зависимости от ваших потребностей. Например, для русской локали раскомментируйте ru_RU.UTF-8 UTF-8. После сохранения файла сгенерируйте выбранные локали командой:

# locale-gen
Примечание: locale-gen также запускается каждый раз при обновлении glibc.

Установка локали

Чтобы отобразить текущую локаль и связанные с ней переменные окружения, наберите:

$ locale

Используемая локаль, выбранная среди сгенерированных в системе, устанавливается в файлах locale.conf, каждый из которых должен содержать список переменных окружения, например:

locale.conf
LANG=en_AU.UTF-8
LC_COLLATE=C
LC_TIME=en_DK.UTF-8
  • Системная локаль устанавливается в файле /etc/locale.conf. Вы можете установить ее также при помощи localectl:
# localectl set-locale LANG=en_US.UTF-8
Подробнее смотрите на man-странице localectl(1).
Совет: Во время установки системы, если вас устраивает вывод команды locale, вы можете просто сохранить его в файл командой locale > /etc/locale.conf (в сеансе arch-chroot).
  • Системная локаль может переопределяться в каждом пользовательском сеансе с помощью файла ~/.config/locale.conf (или, в общем случае, $XDG_CONFIG_HOME/locale.conf либо $HOME/.config/locale.conf).
Совет:
  • Это позволяет вести системные логи в /var/log на английском, при использовании местного языке в рабочей среде пользователя.
  • Вы можете создать файл /etc/skel/.config/locale.conf, тогда для всех новых пользователей, добавленных командой useradd с опцией -m сразу будет автоматически сгенерирован файл ~/.config/locale.conf.

Приоритет файлов locale.conf определяется в /etc/profile.d/locale.sh.

Смотрите #Переменные окружения, man-страницу locale.conf (5) и связанные страницы для получения подробной информации.

После внесения изменений в файлы locale.conf, они вступят в силу после перезагрузки системы, и для отдельных сеансов пользователей — при входе. Чтобы принудительно обновить локаль в текущем окружении без перезагрузки, выполните:

$ source /etc/profile.d/locale.sh

Дополнительно

Переменные окружения настроек локали могут также быть установлены обычным способом, как указано на странице переменные окружения.

Например, чтобы проверить, как работает конкретное приложение с какой-нибудь локалью, вы можете запустить его следующим образом:

$ LANG="en_AU.UTF-8" ./my_application.sh

Переменные окружения

Файлы locale.conf могут содержать следующие переменные окружения:

  • LANG
  • LANGUAGE
  • LC_CTYPE
  • LC_NUMERIC
  • LC_TIME
  • LC_COLLATE
  • LC_MONETARY
  • LC_MESSAGES
  • LC_PAPER
  • LC_NAME
  • LC_ADDRESS
  • LC_TELEPHONE
  • LC_MEASUREMENT
  • LC_IDENTIFICATION

LANG: локаль по умолчанию

Локаль, установленная в этой переменной используется в качестве значения для всех остальных LC_*-переменных, которые не установлены явно.

LANGUAGE: запасные локали

Программы, использующие gettext для перевода, учитывают также переменную LANGUAGE в дополнение к стандартным переменным. Это позволяет пользователям установить список локалей, которые будут использоваться в указанном порядке для поиска перевода. Если перевод для более предпочтительной локали (которая идет первее в списке) недоступен, будет произведена попытка получить перевод для следующей, и так далее. Например, пользователь из Австралии может предпочесть британский вариант перевода американскому:

locale.conf
LANG=en_AU
LANGUAGE=en_AU:en_GB:en

LC_TIME: формат даты и времени

Например, если переменная LC_TIME имеет значение en_US.UTF-8, будет использован формат даты ММ/ДД/ГГГГ. Если вы хотите использовать формат ISO 8601 (ГГГГ-ММ-ДД), установите:

locale.conf
LC_TIME=en_DK.UTF-8

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:

gnome-terminal или rxvt-unicode не поддерживают UTF-8

Чтобы заработала поддержка UTF-8 в этих приложениях, необходимо запускать их с локалью, в которой установлена кодировка UTF-8, например ru_RU.UTF-8. Включите эту локаль в системе, установите ее как системную локаль по умолчанию в соответствиями с инструкциями в предыдущих разделах и перезагрузите компьютер.

Моя система использует неверный язык

Возможно, некоторые переменные окружения из locale.conf были переопределены каким-то другим файлом, например ~/.pam_environment, который используется в GNOME. Подробнее смотрите на странице Переменные окружения#Установка переменных.

Смотрите также