Содержание статьи

В Windows язык сообщений CMD и PowerShell определяется настройками региона, языком интерфейса системы и значениями переменных окружения, таких как LANG и UILanguage. В Linux и macOS ключевую роль играют переменные LANG, LC_ALL и LC_MESSAGES, которые могут задаваться как временно для одной сессии, так и постоянно через конфигурационные файлы оболочки.
Для практической работы важно понимать разницу между временным переключением языка, полезным для диагностики, и постоянной настройкой, сохраняющейся после перезагрузки. Также следует учитывать, что терминалы в IDE, SSH-подключения и контейнеры Docker могут использовать собственные настройки локали, отличные от основной системы.
Определение текущего языка командной строки и системной локали
Перед изменением языка интерфейса необходимо точно определить, какие настройки уже применяются. В большинстве случаев язык сообщений командной строки совпадает с системной локалью, но это правило не универсально. Терминал может использовать собственные параметры, отличные от настроек операционной системы.
Точное понимание текущих параметров позволяет выбрать корректный способ переключения языка и избежать ситуации, когда изменения в системе не влияют на язык сообщений командной строки.
Смена языка интерфейса CMD в Windows через параметры региона
Для переключения языка необходимо открыть системные настройки региона и изменить локаль именно для таких приложений:
- Открыть Панель управления → Часы и регион → Регион.
- Перейти на вкладку Дополнительно.
- В блоке Язык программ, не поддерживающих Unicode нажать кнопку Изменить язык системы.
- Выбрать значение English (United States) или другой англоязычный вариант.
Дополнительно рекомендуется проверить кодовую страницу командной строки. После перезагрузки следует запустить CMD и выполнить:
chcp 437 или chcp 65001
Кодовая страница 437 соответствует стандартной англоязычной среде, а 65001 включает поддержку UTF-8, что снижает риск некорректного отображения символов.
Важно учитывать, что данные изменения влияют только на CMD. PowerShell и Windows Terminal используют собственные механизмы определения языка и могут требовать отдельной настройки.
Настройка языка PowerShell с помощью переменных среды
PowerShell использует отдельные параметры локализации, не совпадающие напрямую с настройками CMD. Язык сообщений, предупреждений и встроенной справки определяется значениями культур интерфейса и форматирования, которые можно изменить через переменные среды и свойства текущей сессии.
Для проверки активных параметров следует выполнить команды $PSUICulture и $PSCulture. Значения вида ru-RU означают русскоязычный интерфейс, тогда как en-US указывает на английский. Эти параметры можно временно переопределить в рамках одной сессии PowerShell.
Чтобы переключить язык интерфейса на английский без изменения системных настроек, используется установка переменной среды LANG:
$env:LANG = "en_US.UTF-8"
Для постоянной настройки рекомендуется добавить установку переменной в профиль PowerShell. Файл профиля определяется командой $PROFILE. В него следует добавить строку с присваиванием LANG, после чего язык интерфейса будет применяться при каждом запуске PowerShell.
Следует учитывать, что язык модулей сторонних производителей зависит от их собственной локализации и может не измениться даже при установленной английской культуре PowerShell.
Изменение языка сообщений Bash в Linux через LANG и LC_ALL

В Linux язык сообщений оболочки Bash и большинства консольных утилит определяется значениями переменных локали. Основное влияние оказывают LANG и LC_ALL, где LC_ALL имеет приоритет и полностью переопределяет остальные параметры локализации.
Временное переключение языка на английский для одной сессии Bash выполняется установкой переменных:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
Для постоянного изменения языка необходимо добавить экспорт переменных в конфигурационный файл оболочки, чаще всего ~/.bashrc или ~/.bash_profile. В серверных дистрибутивах также может использоваться файл /etc/default/locale, влияющий на всех пользователей системы.
Перед установкой английской локали важно убедиться, что она сгенерирована в системе. Проверка выполняется командой locale -a. При отсутствии en_US.UTF-8 локаль необходимо создать с помощью locale-gen или localedef, в зависимости от дистрибутива.
Постоянное сохранение английского языка для терминала
Чтобы английский язык интерфейса применялся при каждом запуске терминала, необходимо зафиксировать настройки локали в конфигурационных файлах, которые читаются оболочкой автоматически. Однократное задание переменных среды не решает задачу при перезагрузке системы или открытии нового окна.
В Linux и других UNIX-подобных системах закрепление выполняется на уровне пользователя или всей системы:
- для одного пользователя – редактирование файлов
~/.bashrc,~/.profileили~/.bash_profile; - для всех пользователей – изменение
/etc/default/localeили файлов в/etc/profile.d/.
В конфигурационный файл добавляются строки:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
В Windows для PowerShell устойчивый результат достигается через профиль пользователя. В файл, путь к которому возвращает команда $PROFILE, следует добавить установку переменной LANG. Это гарантирует применение английского языка при каждом запуске оболочки.
Для классического CMD постоянное сохранение возможно только через системную локаль. Изменение языка программ, не поддерживающих Unicode, влияет на все сеансы командной строки и не может быть ограничено отдельным пользователем.
После внесения изменений рекомендуется полностью закрыть все окна терминалов и открыть их заново, чтобы убедиться, что язык сообщений сохраняется без ручной настройки.
Проверка результата и диагностика, если язык не изменился
После изменения настроек необходимо убедиться, что командная строка действительно использует английский язык. В Windows CMD это проверяется выполнением любой команды с системным сообщением, например dir при отсутствии прав доступа. Текст ошибки должен отображаться на английском, без русских формулировок.
В PowerShell следует повторно выполнить $PSUICulture и $PSCulture. Значения должны соответствовать формату en-*. Если культура изменилась, но сообщения остались на русском, вероятно, используется кэшированный профиль или сессия была запущена до изменения переменных среды.
Частая причина отсутствия изменений – незагруженная английская локаль. При отсутствии en_US.UTF-8 в списке, полученном через locale -a, система продолжает использовать локаль по умолчанию, независимо от заданных переменных.
При работе через SSH необходимо проверить, не передаёт ли клиент собственные значения локали. Параметры SendEnv LANG LC_* в конфигурации клиента могут переопределять настройки сервера и возвращать русскоязычный интерфейс.
Особенности смены языка в терминалах IDE и SSH-сессиях
Терминалы IDE, такие как встроенные консоли редакторов кода, обычно наследуют переменные среды из процесса запуска. Если IDE была открыта до изменения LANG или LC_ALL, терминал внутри неё продолжит использовать старые значения. В таких случаях требуется полный перезапуск IDE.
В SSH-сессиях язык определяется сочетанием настроек клиента и сервера. Клиент может передавать значения локали, которые переопределяют серверные параметры, даже если на сервере явно задан английский язык.
| Контекст | Источник языка сообщений | Что проверить |
|---|---|---|
| Терминал IDE | Переменные среды процесса IDE | Перезапуск IDE, значение LANG в терминале |
| SSH-сессия | Передача локали от клиента | Параметры SendEnv и AcceptEnv |
На стороне клиента SSH следует проверить файл ~/.ssh/config и наличие директивы SendEnv LANG LC_*. На сервере параметр AcceptEnv в /etc/ssh/sshd_config определяет, будут ли приняты значения от клиента.
Вопрос-ответ:
Почему после смены языка системы CMD продолжает выводить сообщения на русском?
CMD ориентируется не на язык интерфейса Windows, а на системную локаль для программ, не поддерживающих Unicode. Если этот параметр остался русским, текст ошибок и служебных сообщений не изменится. Нужно проверить вкладку «Дополнительно» в настройках региона и задать английский язык именно для таких приложений, затем перезагрузить систему.
Можно ли сделать английский язык сообщений только для PowerShell, не меняя настройки всей системы?
Да, PowerShell позволяет задать язык через переменные среды и профиль пользователя. Установка значения LANG в en_US.UTF-8 внутри профиля PowerShell влияет только на эту оболочку. При этом интерфейс Windows и CMD останутся без изменений.
Почему в SSH-подключении к серверу язык снова становится русским, хотя локально настроен английский?
При SSH-подключении клиент может передавать серверу свои значения локали. Если в конфигурации клиента разрешена передача LANG или LC_*, сервер примет их и применит к сессии. Проверка параметров SendEnv на клиенте и AcceptEnv на сервере помогает устранить такое поведение.
Что делать, если в Linux переменные LANG и LC_ALL заданы, но сообщения всё равно не на английском?
Часто причина связана с отсутствием сгенерированной английской локали. Если en_US.UTF-8 отсутствует в выводе locale -a, система игнорирует заданные значения. После генерации локали и повторного входа в сессию Bash сообщения начнут отображаться на английском.
