Изменение Локализации (Языка) и Региональных Настроек в 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 работает и этот способ. Он удобен, когда ты хочешь не только LANG, но и целиком “locale set” одним действием.

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…”

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

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. Это самый удобный режим для админа: искать решения проще, а жить приятнее.

Заключение

Локаль в Ubuntu и Debian настраивается спокойно, если держать в голове простую последовательность: сначала сгенерировать нужную локаль, потом выбрать её в системе, потом при желании поджать региональные параметры через LC_*. Если что-то пошло не так — почти всегда виноват пункт “локаль не сгенерирована” или “переменные выставлены не там, где их читает твоя сессия”.


blank
Обзор конфиденциальности

На этом сайте используются файлы cookie, что позволяет нам обеспечить наилучшее качество обслуживания пользователей. Информация о файлах cookie хранится в вашем браузере и выполняет такие функции, как распознавание вас при возвращении на наш сайт и помощь нашей команде в понимании того, какие разделы сайта вы считаете наиболее интересными и полезными.