Локализация Ubuntu Server 18.04 LTS

14.01.2020

Теги: CLILinuxUbuntuКомандаКонфигурацияНастройкаСерверУстановка

Локаль (locale или локализация) в Linux определяет, какой язык и какой набор символов (кодировку), пользователь видит в терминале. Посмотрим, как проверить текущие настройки языка и кодировки, как получить список всех доступных локалей, как сменить язык и кодировку для текущей сессии или установить их постоянно.

Для тех, кому лень читать всю статью до конца — чаще всего для локализации консоли достаточно повторно сконфигурировать пакет locales:

$ sudo dpkg-reconfigure locales

Сначала будут созданы нужные локали (их выбрать на первом экране), потом установлена локаль по умолчанию (ее выбрать на втором экране).

Текущие настройки языка

Посмотрим информацию о текущем языковом окружении:

$ locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=

Список доступных локалей

Теперь посмотрим список всех установленных языков и кодировок:

$ locale -a
C
C.UTF-8
POSIX

Есть только системная локаль C.UTF-8, которая присутствует всегда. А нам надо добавить еще две локали — en_US.UTF-8 и ru_RU.UTF-8.

Добавить новую локаль

Смотрим список всех поддерживаемых (доступных для установки) локалей:

$ cat /etc/locale.gen
# This file lists locales that you wish to have built. You can find a list
# of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add
# user defined locales to /usr/local/share/i18n/SUPPORTED. If you change
# this file, you need to rerun locale-gen.

# aa_DJ ISO-8859-1
# aa_DJ.UTF-8 UTF-8
# ..........
# en_US.ISO-8859-15 ISO-8859-15
# en_US.UTF-8 UTF-8
# en_ZA ISO-8859-1
# ..........
# ru_RU.KOI8-R KOI8-R
# ru_RU.UTF-8 UTF-8
# ru_UA KOI8-U
# ..........
# zu_ZA ISO-8859-1
# zu_ZA.UTF-8 UTF-8

Устанавливаем нужные локали — en_US.UTF-8 и ru_RU.UTF-8:

$ sudo locale-gen en_US.UTF-8 ru_RU.UTF-8
Generating locales (this might take a while)...
  en_US.UTF-8... done
  ru_RU.UTF-8... done
Generation complete.

Второй способ установить локали — расскомментровать нужные строки в файле /etc/locale.gen

# This file lists locales that you wish to have built. You can find a list
# of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add
# user defined locales to /usr/local/share/i18n/SUPPORTED. If you change
# this file, you need to rerun locale-gen.

# aa_DJ ISO-8859-1
# aa_DJ.UTF-8 UTF-8
# ..........
# en_US.ISO-8859-15 ISO-8859-15
en_US.UTF-8 UTF-8
# en_ZA ISO-8859-1
# ..........
# ru_RU.KOI8-R KOI8-R
ru_RU.UTF-8 UTF-8
# ru_UA KOI8-U
# ..........
# zu_ZA ISO-8859-1
# zu_ZA.UTF-8 UTF-8

И просто выполнить команду locale-gen без указания локалей:

$ sudo locale-gen

Подробная информация о локалях

Более подробную информацию об установленных в системе локалях можно посмотреть так:

$ locale -a -v
locale: en_US.utf8      archive: /usr/lib/locale/locale-archive
-------------------------------------------------------------------------------
    title | English locale for the USA
   source | Free Software Foundation, Inc.
  address | http://www.gnu.org/software/libc/
    email | bug-glibc-locales@gnu.org
 language | American English
territory | United States
 revision | 1.0
     date | 2000-06-24
  codeset | UTF-8

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: ru_UA.utf8      archive: /usr/lib/locale/locale-archive
-------------------------------------------------------------------------------
    title | Russian locale for Ukraine
   source | RFC 2319
    email | bug-glibc-locales@gnu.org
 language | Russian
territory | Ukraine
 revision | 1.0
     date | 2000-06-29
  codeset | UTF-8

locale: C.UTF-8         directory: /usr/lib/locale/C.UTF-8
-------------------------------------------------------------------------------
    title | C locale
    email | aurel32@debian.org
 language | C
 revision | 1.6
     date | 2016-08-08
  codeset | UTF-8

Часть локалей размещена в архиве /usr/lib/locale/locale-archive, а часть — в директориях внутри /usr/lib/locale/.

Локаль по-умолчанию

Хорошо, нужные локали у нас теперь есть, осталось только задать локаль по умолчанию:

$ sudo update-locale LANG=ru_RU.UTF-8

Эта команда запишет в файл /etc/default/locale строку:

LANG=ru_RU.UTF-8

После этого надо будет перезайти в систему. И проверяем информацию о языковом окружении:

$ 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=

Теперь все правильно, так что запишем эту информацию в файл /etc/default/locale:

$ locale | sudo tee /etc/default/locale
$ cat /etc/default/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=

Переменная окружения LANG — это локаль по умолчанию. Локаль, установленная в этой переменной, используется в качестве значения для всех остальных переменных LC_XXXXX, которые не установлены явно. Переменная окружения LC_ALL переопределяет своим значением все переменные LC_XXXXX, включая LANG — независимо от того, установлены они или нет.

Быстрая локализация

До сих пор мы все делали ручками, но если лень — можно просто повторно сконфигурировать пакет locales. Сначала будут созданы нужные локали (их нужно выбрать на первом экране), потом установлена локаль по умолчанию (ее нужно выбрать на втором экране).

$ sudo dpkg-reconfigure locales

Удалить лишние локали

После установки (генерации) локали, она помещается в архив /usr/lib/locale/locale-archive. Файл архива — это файл, отображаемый в память, который содержит все локали системы; он используется всеми локализованными программами. Посмотреть список локалей в архиве можно с помощью команды:

$ localedef --list-archive
en_US.utf8
ru_RU.utf8
ru_UA.utf8

Удалить заданную локаль из файла архива:

$ sudo localedef --delete-from-archive ru_UA.utf8

Обратите внимание на название локали — ru_UA.utf8, а не ru_UA.UTF-8. Если неправильно указать локаль — она не будет удалена из архива:

$ sudo localedef --delete-from-archive ru_UA.UTF-8
locale "ru_UA.UTF-8" not in archive

В случае, если утилита locale-gen была вызвана с опцией --no-archive, надо удалить соответствующую директорию в /usr/lib/locale:

$ cd /usr/lib/locale
$ ls
C.UTF-8    en_US.utf8    ru_RU.utf8    ru_UA.utf8
$ sudo rm -r ru_UA.utf8

Есть еще один способ удалить лишние локали — закомментровать в файле /etc/locale.gen строки локалей, которые больше не нужны — и запустить locale-gen без параметров.

Переводы для системных программ

Локализация для основных системных программ, чтобы получать сообщения на русском языке:

$ sudo apt install language-pack-ru

Локализация для текущей сессии

Достаточно временно установить переменную окружения LANG в текущей сессии терминала:

$ export LANG=en_US.UTF-8
$ cat /etc/shadow
cat: /etc/shadow: Permission denied
$ export LANG=ru_RU.UTF-8
$ cat /etc/shadow
cat: /etc/shadow: Отказано в доступе

Или даже так — передать переменную LANG конкретной программе:

$ export LANG=en_US.UTF-8
$ cat /etc/shadow
cat: /etc/shadow: Permission denied
$ LANG=ru_RU.UTF-8 cat /etc/shadow
cat: /etc/shadow: Отказано в доступе

Файлы конфигурации шрифта и клавиатуры

Настройки можно найти в файлах конфигурации /etc/default/console-setup и /etc/default/keyboard:

$ cat /etc/default/console-setup
# Consult the console-setup(5) manual page.
ACTIVE_CONSOLES="/dev/tty[1-6]"
CHARMAP="UTF-8"
CODESET="CyrSlav"
FONTFACE="Fixed"
FONTSIZE="8x16"
VIDEOMODE=
$ cat /etc/default/keyboard
# Consult the keyboard(5) manual page.
XKBMODEL="pc105"
XKBLAYOUT="us,ru"
XKBVARIANT=","
XKBOPTIONS="grp:alt_shift_toggle,grp_led:scroll"
BACKSPACE="guess"

Это системные настройки, пользователь может создать свои в файлах ~/.console-setup и ~/.keyboard.

Настройка шрифта и клавиатуры

Чтобы сформировать файлы конфигурации /etc/default/console-setup и /etc/default/keyboard можно использовать команды:

$ sudo dpkg-reconfigure console-setup

$ sudo dpkg-reconfigure keyboard-configuration

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

Console-cyrillic — это пакет для руссификации консоли (поддержки кириллицы в терминале), старый и известный пакет. Но в новых версиях операционных систем с системой инициализации systemd он считается устаревшим, поскольку у systemd есть нативные средства локализации консоли и наличие console-cyrillic там не только не требуется, но и не рекомендуется.

Команда localectl предоставляет возможности для централизованного управления языковыми и региональными параметрами.

$ localectl --help
localectl [OPTIONS...] COMMAND ...

Query or change system locale and keyboard settings.

Commands:
  status                   Show current locale settings
  set-locale LOCALE...     Set system locale
  list-locales             Show known locales
  set-keymap MAP [MAP]     Set console and X11 keyboard mappings
  list-keymaps             Show known virtual console keyboard mappings
  set-x11-keymap LAYOUT [MODEL [VARIANT [OPTIONS]]]
                           Set X11 and console keyboard mappings
  list-x11-keymap-models   Show known X11 keyboard mapping models
  list-x11-keymap-layouts  Show known X11 keyboard mapping layouts
  list-x11-keymap-variants [LAYOUT]
                           Show known X11 keyboard mapping variants
  list-x11-keymap-options  Show known X11 keyboard mapping options

Options:
  -h --help                Show this help
     --version             Show package version
     --no-pager            Do not pipe output into a pager
     --no-ask-password     Do not prompt for password
  -H --host=[USER@]HOST    Operate on remote host
  -M --machine=CONTAINER   Operate on local container
     --no-convert          Don't convert keyboard mappings

See the localectl(1) man page for details.
$ localectl status
   System Locale: LANG=ru_RU.UTF-8
       VC Keymap: n/a
      X11 Layout: us,ru
       X11 Model: pc105
     X11 Variant: ,
     X11 Options: grp:alt_shift_toggle
$ localectl list-locales
C.UTF-8
en_US.UTF-8
ru_RU.UTF-8
ru_UA.UTF-8

Поиск: CLI • Linux • Ubuntu • Команда • Конфигурация • Настройка • Сервер • Установка • Локализация • Русский • ru_RU.UTF-8 • locale

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.