Изменение локализации и региональных настроек в Ubuntu и Debian

Локаль в Linux задаёт язык сообщений, форматы дат и времени, десятичный разделитель, валюту и сортировку строк. Из-за неё в логах одного сервера может быть «Jan 18», а на другом «18 янв». За это отвечают переменные LANG и LC_*.

Ниже порядок для Ubuntu и Debian: как посмотреть текущие настройки, сгенерировать нужные локали, сделать их системными и менять только отдельные куски (например, английский интерфейс, но русские даты).

Как быстро проверить, что сейчас в системе

Начните с двух команд. Они показывают, чем система живёт прямо сейчас и какие локали уже доступны.

locale
locale -a

locale выводит активные переменные (LANG, LC_TIME и остальные). locale -a показывает локали, которые реально сгенерированы. Если нужна ru_RU.UTF-8, а её нет в списке, сначала генерация.

Ubuntu: установка языка и генерация локали

На Ubuntu Server обычно достаточно пакета locales. На Desktop дополнительно встречаются языковые пакеты, но для системной локали это вторично.

sudo apt update
sudo apt install -y locales

Дальше два пути: через интерактивную настройку или руками.

Вариант 1: быстро через dpkg-reconfigure

Самый простой способ. Выбираете нужные локали и дефолтную.

sudo dpkg-reconfigure locales

Отметьте ru_RU.UTF-8 (пробелом) и на следующем шаге выберите её как default, если нужна полностью русская среда.

Вариант 2: руками через /etc/locale.gen

Когда нужно сделать всё предсказуемо, без меню.

sudo nano /etc/locale.gen

Найдите строку и раскомментируйте:

ru_RU.UTF-8 UTF-8

Сгенерируйте локали:

sudo locale-gen

Debian: то же самое, без «языковых пакетов»

В Debian обычно всё крутится вокруг locales и dpkg-reconfigure locales. Если пакет не установлен, ставим.

sudo apt update
sudo apt install -y locales
sudo dpkg-reconfigure locales

Дальше логика та же: сначала убедитесь, что ru_RU.UTF-8 появился в locale -a.

Как выставить локаль системой

Чтобы сделать локаль дефолтной для системы, обычно достаточно update-locale. Команда правит /etc/default/locale.

sudo update-locale LANG=ru_RU.UTF-8

После этого новые сессии (новый вход по SSH, новый терминал, перезапуск служб где надо) начинают жить с новой LANG. Полная перезагрузка чаще не нужна. На Desktop, если нужно перелокализовать окружение целиком, проще перезайти в систему.

Если система на systemd: localectl

На Ubuntu и Debian с systemd удобно выставить locale set одним действием, а не только LANG.

localectl status
sudo localectl set-locale LANG=ru_RU.UTF-8

Региональные настройки: не русский интерфейс, а русские даты и числа

Частый кейс на серверах: сообщения остаются на английском (удобнее искать ошибки), а формат времени и чисел «по-людски». Это делается через LC_*.

Пример: английский интерфейс, но русская дата и русские форматы денег:

sudo update-locale LANG=en_US.UTF-8 LC_TIME=ru_RU.UTF-8 LC_MONETARY=ru_RU.UTF-8

Проверка:

locale

Можно править /etc/default/locale вручную. Формат простой, главное не указывать локали, которых нет в locale -a.

LANG=ru_RU.UTF-8
LC_NUMERIC=ru_RU.UTF-8
LC_TIME=ru_RU.UTF-8
LC_MONETARY=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

После правки обычно достаточно пересгенерировать локали и перелогиниться:

sudo locale-gen

Пользовательская локаль: не трогая весь сервер

Иногда сервер общий, и менять /etc/default/locale нельзя или не нужно. Тогда локаль выставляют только для пользователя через переменные в профиле.

nano ~/.profile

Добавьте строки:

export LANG=ru_RU.UTF-8
export LC_TIME=ru_RU.UTF-8

Перелогиньтесь, чтобы переменные подхватились. Для SSH это обычно самый ожидаемый вариант.

Типовые проблемы и быстрые фиксы

Ошибка «locale: Cannot set LC_ALL…»

Почти всегда значит одно: локаль выставлена, но не сгенерирована. Проверяется за секунды.

locale -a | grep -i ru_ru

Если пусто, добавьте локаль в /etc/locale.gen и выполните sudo locale-gen.

Переменные поменялись, а интерфейс «не весь перевёлся»

На Desktop это нормально: часть приложений тянет переводы из языковых пакетов, часть читает локаль при старте. Проще перезайти в графическую сессию. На сервере обычно достаточно новой SSH-сессии.

Русские форматы, но логи и ошибки на английском

Удобный режим для админа: LANG=en_US.UTF-8 и точечно нужные региональные форматы через LC_TIME, LC_NUMERIC, LC_MONETARY. Искать решения проще, жить приятнее.

Кратко

Последовательность простая: сначала сгенерировать нужную локаль, потом выбрать её в системе, потом при желании поджать региональные параметры через LC_*. Если что-то пошло не так, чаще всего локаль не сгенерирована или переменные выставлены не там, где их читает сессия.

Источники и ссылки


Комментарии загружаются…