Настройка локали в консоли в CentOS.

Частенько владельцы выделенных серверов получают свои сервера от провайдеров с неверно сконфигурированной локалью. Как следствие в консоли не отображаются русские буквы. На тему русификации уже написана гора всяческих заметок, но я в двух словах опишу методы установки правильной локали в CentOS linux 4.x, 5.xТак как CentOS грубо говоря является клоном RedHat Enterprize Linux, то консоль использует кодировку UTF-8 то есть юникод. Ну так вот у них повелось. Лично мое мнение - юникод рулит. Постепенно юникод вытесняет кучу наших кодировок типа CP1251, KOI8-R. И это очень хорошо. Потому как так достали все эти прибабахи с кодировками - спасу нет.

Для того чтобы увидеть нормальные русские буквы в нашей консоли первым делом нам необходимо настроить клиента. Все мы знаем как это сделать, поэтому останавливаться на этом не будем.

Если проблема не в настройке клиента и вы на 100% в этом уверены - идем дальше.
Проверить какая локаль сейчас установлена можно с помощью команды

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=


Это означает что кодировка у нас в консоли используется en_US.UTF-8. Но вывод может выглядеть совсем иначе. Например вот так:
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=


Для того чтобы проверить наличие готовых локалей в системе выполняем команду

locale -a | grep ru


locale -a | grep ru_
ru_RU
ru_RU.iso88595
ru_RU.koi8r
ru_RU.utf8
ru_UA
ru_UA.koi8u
ru_UA.utf8

И в выводе команды ищем необходимую нам локаль. Для случая с кодировкой UTF-8 необходимая локаль имеет вид ru_RU.utf8. Если такая строка есть в выводе команды то делаем следующее:

Создаем файл /etc/sysconfig/i18n командой:

touch /etc/sysconfig/i18n


После чего в файл пишем следующие строки:

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


После этих изменений сохраняем файл, выходим из консоли и заходим в нее опять. После этих действий мы наблюдаем русский шрифт в локали.

Если же при выводе команды

locale -a | grep ru


нет русской локали то ее необходимо сделать. Команда для этого выглядит так:

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
После этого действия у нас в системе появляется нужная нам локаль, а дальше делаем все так как описано на абзац выше.

P.S: Добавлю только что файлы находящиеся в папке usr/share/i18n/ принадлежат glibc-common-2.x.x и если вы их не наблюдаете там, то необходимо разбираться с самим glibc-common.




Вас также может заинтересовать:

Настройка SVN + TRAC Centos
Установка и настройка ProxyChains на Centos 5.5
Для CentOS 5.6 доступны обновления, выпущенные для RHEL 5.7 (Centos 5.7 ?)
Релиз Linux-дистрибутива CentOS 5.6 (centos upgrade)
30.05.2010 Фреймбуффер в консоли и с чем его едят
Сброс забытого пароля HP iLO из консоли GNU/Linux