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