Настройка локали в консоли в 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. Потому как в бан гугла можно попасть элементарно. Да и карму портить не стоит.
ну и текст в файлах все равно не показывается нормально. проблема в том, что файлы создавались под виндой и кодировка у них – 1251. Я, конечно, понимаю, что кодировки разные это херня и надо UTF8 везде, НО! если ты пишешь статью для тех, кто использует винду (putty), то тогда подумай, что там везде будет 1251! а 1251 в списке том нет нихрена.
↓ Quote | Posted December 17, 2007, 10:41 pmЕсли Вы, уважаемый Василей, внимательно прочтете заметку до конца, то сможете на ее примере сделать все тоже самое для cp1251. Лично для Вас разжевывать и класть вам в рот я материал не буду. Немного смекалки и все будет отлично.
↓ Quote | Posted December 18, 2007, 9:59 amКонечно можно повтыкать везде 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 ИМХО не годится ….
↓ Quote | Posted May 20, 2008, 3:48 pmЧто для того чтобы прочитать одну или другую надпись – всё время дёргать локаль ??????
Уважаемый автор! Спасибо. Голову ломал как же по ssh в vi мне файлик в кодировке 1251 исправить.
↓ Quote | Posted May 23, 2008, 3:56 pmДа не мучайтесь вы с этой 1251 , установите Нотпад и перекиньте всё в утф-8
↓ Quote | Posted October 13, 2008, 5:41 pmА зачем противопоставлять Юникод и cp1251? Я вот настроил в putty сразу 2 коннекта – один использует на стороне Windows Юникод, другой – обычный cp1251. На стороне CentOS по умолчанию использую cp1251, потому что чаще всего приходится править через vi конфиги и скрипты в виндовской кодировке. Но если нужно – соединяюсь через коннект с Юникодом и даю команду export LANG=ru_RU.utf8.
↓ Quote | Posted October 21, 2008, 7:39 pmОчень полезная статья, помогла с импортом товаров в магазин в нужной кодировке (на сервере не было локали CP1251), спасибо автору.
↓ Quote | Posted January 17, 2009, 6:44 pmДа полезная статья. Первый совет помог увидеть Midnight Commander в putty в нормальном виде.
↓ Quote | Posted February 12, 2010, 2:54 amА после замены в /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
чтобы увидеть результат.