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

Частенько владельцы выделенных серверов получают свои сервера от провайдеров с неверно сконфигурированной локалью. Как следствие в консоли не отображаются русские буквы. На тему русификации уже написана гора всяческих заметок, но я в двух словах опишу  методы  установки правильной локали в CentOS linux  4.x, 5.xТак как CentOS грубо говоря является клоном RedHat Enterprize Linux, то консоль использует кодировку UTF-8 то есть юникод. Ну так вот у них повелось. Лично мое мнение - юникод рулит. Постепенно юникод вытесняет кучу наших кодировок типа CP1251, KOI8-R. И это очень хорошо. Потому как так достали все эти прибабахи с кодировками - спасу нет.
Итак.
Для того чтобы увидеть нормальные русские буквы в нашей консоли первым делом нам необходимо настроить клиента. Подключаемся же мы удаленно, и наверняка с помощью нашей любимой проги putty.
Для настройки putty запускаем ее выбираем необходимое соединение, загружаем его с помощью кнопки Load. Далее переходим в  Window  --> Translation и в выпадающем меню выбираем UTF-8. После чего сохраняем настройки для этого соединения с помощью кнопки Save.
Как ни странно многие проблемы с кодировками решаются именно этим пунктом :-)
Если ничего не получилось - идем дальше.
Проверить какая локаль сейчас установлена можно с помощью команды
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

И в выводе команды ищем необходимую нам локаль. Для случая с кодировкой 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
После этого действия у нас в системе появляется нужная нам локаль, а дальше делаем все так как описано на абзац выше.
Добавлю только что файлы находящиеся в папке usr/share/i18n/ принадлежат glibc-common-2.x.x и если вы их не наблюдаете там, то необходимо разбираться с самим glibc-common.
Надеюсь моя заметка поможет владельцам выделенных серверов увидеть таки русскую локализацию в консоли.
P.S. Специально для владельцев host-service.info. Это мой материал. Я его сам писал. Имейте совесть. Оставляйте ссылку на http://dedicatesupport.com. Потому как в бан гугла можно попасть элементарно. Да и карму портить не стоит.

Спасибо! Помогло

Спасибо! Помогло

Добрый день!Извините,

Добрый день!Извините, подскажите,как новичку, какой командой в консоли можно открыть этот файл и редактировать touch /etc/sysconfig/i18n. до этого все сделала, а потом застряла!спасибо)

vi /etc/sysconfig/i18n

vi /etc/sysconfig/i18n

Отличная заметка!

Отличная заметка! Зачет!
Кстати буржуи с форума ZpanelCP используют именно ваш материал для исправления локали! Сам видел!

Не дает изменить файл i18. Он

Не дает изменить файл i18. Он readOnly только. что делать? спасибо

под рутом зайти

под рутом зайти

Столкнулся с такой

Столкнулся с такой проблнмой:
стоит гостенвая centos 6.2 на Citrix XenServer 5.6, при локализации(кодировка любая) непосредственно в консоле клиента citrix получаю "кракозябры", хотя при подключении по SSH все работает на ура. В гостевых на FreeBSD таких проблем не наблюдаю.
Подскажите куда копать.

Проблема в VNC Viewer самого

Проблема в VNC Viewer самого Xen. Такая ерунда с отображением русского языка в любых Linux работающих в режиме паравиртуализации.

Спасибо за статью. Работает

Спасибо за статью.
Работает также в scientific linux 6.1.

Спасибо, все просто и

Спасибо, все просто и логично.

Всё норм

Статья вполне сносная, жаловаться на неё не стоит, поскольку у большинства работает + четко оговорено что для центоси)
Мне помогла, рад вообще)
Непонятно почему только у Putty по дефолту KOI8-R стоит кодировка...
На счёт UTF-8 полностью согласен - других нам не надо! Особенно на сайтах...

Да полезная статья. Первый

Да полезная статья. Первый совет помог увидеть Midnight Commander в putty в нормальном виде.
А после замены в /etc/sysconfig/i18n строк:
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
на такие:
LANG="ru_RU.UTF-8"
SUPPORTED="ru_RU.UTF-8:ru_RU:ru"
SYSFONT="latarcyrheb-sun16"
надписи в Midnight Commander сделались русскими вместо английских.
А кодировку на сайте, например на Joomla, чтобы были не ромбики, а русские буквы, помогло исправить то что закомментировал в /etc/httpd/conf/httpd.conf строку AddDefaultCharset UTF-8
после чего надо сделать:
service httpd restart
чтобы увидеть результат.

/etc/httpd/conf/httpd.conf

/etc/httpd/conf/httpd.conf строку AddDefaultCharset UTF-8
Za eto otdelnoje spasibo, srazu pomoglo. SPASIBO

Спасибо тебе за

Спасибо тебе за AddDefaultCharset UTF-8

Очень полезная статья,

Очень полезная статья, помогла с импортом товаров в магазин в нужной кодировке (на сервере не было локали CP1251), спасибо автору.

А зачем противопоставлять

А зачем противопоставлять Юникод и cp1251? Я вот настроил в putty сразу 2 коннекта - один использует на стороне Windows Юникод, другой - обычный cp1251. На стороне CentOS по умолчанию использую cp1251, потому что чаще всего приходится править через vi конфиги и скрипты в виндовской кодировке. Но если нужно - соединяюсь через коннект с Юникодом и даю команду export LANG=ru_RU.utf8.

Да не мучайтесь вы с этой

Да не мучайтесь вы с этой 1251 , установите Нотпад и перекиньте всё в утф-8

Конечно можно повтыкать везде

Конечно можно повтыкать везде en_US.UTF-8 , но едва ли от этого будет толк :

Для того чтобы не видеть билеберду при выполнении pstree а также багов man страниц нужно
чтобы в путти было установленно в меню Translation также UTF-8 , а в таком случае всегда будешь видеть билеберду в названиях, написанных русскими буквами не в кодировке утф-8 :(.

А я поступаю проще втыкаю в .bashrc такую строку:
export LANG='en_US.iso885915'

или в /etc/sysconfig/i18n:
LANG="en_US.iso885915"

кому как нравится и тогда всегда порядок в выводе pstree и т.п. Правда чтобы адекватно отображались
надписи других кодировок придётся всё равно валить во всё тот же пункт путти и выбирать нужную кодировку ,
но так по-моему гораздо удобнее.

Потому что то, что предложили с утф-8 ИМХО не годится ....
Что для того чтобы прочитать одну или другую надпись - всё время дёргать локаль ??????

Если Вы, уважаемый Василей,

Если Вы, уважаемый Василей, внимательно прочтете заметку до конца, то сможете на ее примере сделать все тоже самое для cp1251. Лично для Вас разжевывать и класть вам в рот я материал не буду. Немного смекалки и все будет отлично.

ну и текст в файлах все равно

ну и текст в файлах все равно не показывается нормально. проблема в том, что файлы создавались под виндой и кодировка у них - 1251. Я, конечно, понимаю, что кодировки разные это херня и надо UTF8 везде, НО! если ты пишешь статью для тех, кто использует винду (putty), то тогда подумай, что там везде будет 1251! а 1251 в списке том нет нихрена.

Многоуважаемый Василей! Если

Многоуважаемый Василей!
Если Вам надо просмотреть файлик в кодировке, отличной от системной, изучите
man iconv
А что касается PuTTY - она прекрасно понимает UTF-8 и не только его...