Настройка locate (локали) в Unix/Linux

Настройка locate (локали) в Unix/Linux

Я получил сообщение об ошибке следующего содержания при подключении к любому удаленному Unix/Linux серверу терминал:

-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

Сейчас, я расскажу в своей статье «Настройка locate (локали) в Unix/Linux» как можно данную ошибку исправить.

Смотрим какое переменное окружение установлено:

# printenv

Проверяем локаль:

$ locale

Можно отгрепать нужное:

┌(captain@Macbook)─(✓)─(10:49 AM Wed Apr 20)
└─(~)─(19 files, 600b)─> locale -a | grep ru
ru_RU
ru_RU.CP1251
ru_RU.CP866
ru_RU.ISO8859-5
ru_RU.KOI8-R
ru_RU.UTF-8

┌(captain@Macbook)─(✓)─(10:49 AM Wed Apr 20)
└─(~)─(19 files, 600b)─>

Данная команда покажет на экран нужную локаль. Например, для кодировки UTF-8 нужна следующая локаль — ru_RU.utf8. При выводе данной команды если имеется данная локаль,  нужно сейчас создать:

# touch /etc/sysconfig/i18n

И добавляем в файл:

LANG="ru_RU.UTF-8"
SUPPORTED="ru_RU.UTF-8:ru_RU:ru"
SYSFONT="latarcyrheb-sun16"

Для utf-8 используйте:

LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

Сохраняем открытый файл и перезаходим в консоль, должен появиться русский шрифт в локали. Но бывает так, что при выводе команды:

$ locale -a | grep ru

Способ 1.

Ничего не показало ( нет именно русской локали), то мы сейчас это исправим:

$ localedef -i ru_RU -f UTF-8 ru_RU.UTF-8

И так, команда что выше, берет из директории /usr/share/i18n/locales/ файл с русской локалью с названием —  ru_RU, а так же, из директории /usr/share/i18n/charmaps файлик с символьной картой для юникода с названием — UTF-8.gz. После чего, на основании двух этих файлов — генерирует необходимую локаль с именем — ru_RU.UTF-8. Собственно, локаль была сгенерирована, сейчас нужно выполнить все действия что я приводил выше.

Более расширенный вариант:

$ locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Способ 2.

Можно предотвратить передачу LC_* переменных в самой утилите (OpenSSH клиенте) на Unix/Linux машине.
Откройте /etc/ssh/ssh_config или /etc/ssh_config:

$ sudo vim ~/.ssh/config

Удаляем или закоментируйте строку:

#SendEnv LANG LC_*

Сохраняйте и закройте данный файл. Настройка locate (локали) в Unix/Linux завершена.

2 thoughts on “Настройка locate (локали) в Unix/Linux

  1. Хорошая статья.

    Есть ли такая же статья по том как передать локали (напр. ru_RU) в питоновский докерфайл?

    • Просто в Dockerfile вставить:
      ENV LANG="ru_RU.UTF-8"

      Так же, можно добавлять и другие переменные (LC_ALL, LC_CTYPE и так далее).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.