Локализация Ubuntu Server 18.04 LTS
Локаль (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