Региональные настройки (locale) в Linux
Locale в linux
Locale (локаль) — это региональные настройки операционной системы.
Каждая GNU/Linux система поставляется с конкретными региональными настройками. Эти настройки влияют на язык:
- интерфейса,
- сообщений об ошибках;
- справочной информации;
- вывода консольных утилит.
Но locale влияет не только на язык. Дополнительно это влияет на формат чисел, даты и времени, денежной валюты и другого.
Определение текущей locale в системе
Во-первых давайте определим с какими региональными настройками вы работаете в данный момент. Другими словами, какая locale сейчас используется в вашей linux системе. Для этого нужно выполнить команду locale без дополнительных параметров:
$ locale
LANG=ru_RU.UTF-8
LANGUAGE=
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="ru_RU.UTF-8"
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"
LC_ALL=
- Утилита покажет региональные настройки для пользователя.
Имя локали состоит из нескольких частей. Вначале двумя маленькими символами обозначается язык, затем после нижнего подчеркивания идет название страны. Дальше идет кодировка, в современном мире чаще всего используется кодировка UTD-8. Примеры локалей:
- ru_RU.UTF-8 — Русский Россия;
- ru_UA.UTF-8 — Русский Украина;
- en_US.UTF-8 — Английский США;
- en_GB.UTF-8 — Английский Великобритания.
Разберём вывод предыдущей команды.
LANG — системная локаль для этого пользователя содержит значение ru_RU.UTF-8.
Дальше идут переменные, которыми могут пользоваться некоторые утилиты или подсистемы, рассмотрим некоторые из них:
- LANGUAGE — список резервных языков для перевода. Если приложение умеет это использовать и у приложения нет локализации для определённой локали, то оно может использовать запасную локаль;
- LC_NUMERIC — формат чисел, например 100 000 /100.000 / 100,000;
- LC_MONETARY — валюта и денежное форматирование.
Эти и другие переменные используются различными утилитами и подсистемами. Но обычно нет смысла использовать разные локали для этих подсистем.
Список сгенерированных locales в системе
В системе можно использовать только сгенерированные локали. Посмотреть какие сейчас сгенерированы можно так:
alex@s-ubu:~$ locale -a
C
C.utf8
POSIX
ru_RU.utf8
Логали: C, C.utf8, POSIX — это синонимы. Они являются локалями используемыми по умолчанию, если не задана никакая другая локаль.
В системе есть ещё одна локаль — ru_RU.utf8. Эта локаль была сгенерирована при установки системы.
А если добавим опцию -v, то дополнительно увидим описание по каждой locale:
$ locale -a -v
locale: ru_RU.utf8 archive: /usr/lib/locale/locale-archive
-------------------------------------------------------------------------------
title | Russian locale for Russia
source | RAP
address | Sankt Jorgens Alle 8, DK-1615 Kobenhavn V, Danmark
email | bug-glibc-locales@gnu.org
language | Russian
territory | Russia
revision | 1.0
date | 2000-06-29
codeset | UTF-8
locale: C.utf8 directory: /usr/lib/locale/C.utf8
-------------------------------------------------------------------------------
title | C locale
email | bug-glibc-locales@gnu.org
revision | 2.1
date | 2022-01-30
codeset | UTF-8
Так как локали C и POSIX это псевдонимы к C.utf8, то в этом выводе они исключаются.
Генерация новых locales
Список locales находятся в файле — /etc/locale.gen. А чтобы сгенерировать новую локаль нужно разкоментировать нужные локали в этом файле, а затем выполнить от суперпользователя команду locale-gen. Давайте попробуем сгенерировать locale en_US.utf8:
$ sudo nano /etc/locale.gen
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8
$ sudo locale-gen
Generating locales (this might take a while)...
en_US.UTF-8... done
ru_RU.UTF-8... done
Generation complete.
Кстати, если мы укажем использовать локаль, которую не сгенерировали. То команда locale сообщит нам об ошибке:
$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=fr_FR.utf8
LANGUAGE=
LC_CTYPE="fr_FR.utf8"
LC_NUMERIC="fr_FR.utf8"
LC_TIME="fr_FR.utf8"
LC_COLLATE="fr_FR.utf8"
LC_MONETARY="fr_FR.utf8"
LC_MESSAGES="fr_FR.utf8"
LC_PAPER="fr_FR.utf8"
LC_NAME="fr_FR.utf8"
LC_ADDRESS="fr_FR.utf8"
LC_TELEPHONE="fr_FR.utf8"
LC_MEASUREMENT="fr_FR.utf8"
LC_IDENTIFICATION="fr_FR.utf8"
LC_ALL=
В выводе видно, что мы пытаемся использовать локаль fr_FR.utf8, но забыли его сгенерировать.
Настройка различных locales разным пользователям
Для начала, если не настраивать локаль отдельным пользователям, то все они будут использовать локаль прописанную в файле /etc/default/locale:
alex@s-ubu:~$ cat /etc/default/locale
LANG=ru_RU.UTF-8
Из вывода видно что все пользователи будут использовать локаль ru_RU.UTF-8.
Если пользователю нужно использовать другую локаль, то можно для него переопределить переменную LANG. Для этого можно использовать файл .bashrc в его домашнем каталоге, например:
alex@s-ubu:~$ nano .bashrc
LANG=en_US.utf8
alex@s-ubu:~$ su - alex
alex@s-ubu:~$ locale
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
Теперь все пользователи, кроме alex будут использовать локаль ru_RU.utf8, а alex будет использовать локаль en_US.utf8.
Перенастройка locales с помощью одной команды
В самом конце я покажу команду, с помощью которой можно сгенерировать нужные локали и убрать не нужные, а также выставить локаль по умолчанию. Это команда dpkg-reconfigure locales и запускать её нужно с правами администратора:
$ sudo dpkg-reconfigure locales
После выполнения команды вы увидите псевдографический интерфейс:

После выбора locales для генерации, вам нужно будет выбрать locale по умолчанию, которая пропишется в файл /etc/default/locale:

Итог
Мы познакомились с настройками locale в linux на примерах операционных систем Debian и Ubuntu.
Изучили команды:
locale— для просмотра используемой и сгенерированных локалей;locale-gen— для генерации локалей;dpkg-reconfigure locales— для генерации локалей и установки локали по умолчанию.
А также узнали про системные файлы:
/etc/default/locale— в нём прописана локаль по умолчанию;/etc/locale.gen— здесь содержится список доступных локалей для генерации;.bashrc— с помощью этого файла, в домашнем каталоге пользователя, можно переопределить локаль для пользователя.
Если понравилась статья, подпишись на мой канал в VK или Telegram .