Оглавление

Локаль в 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_*. Если что-то пошло не так — почти всегда виноват пункт “локаль не сгенерирована” или “переменные выставлены не там, где их читает твоя сессия”.