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