Настройка локали в консоли в 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. Потому как в бан гугла можно попасть элементарно. Да и карму портить не стоит.

Рейтинг@Mail.ru

ламинат balterio, паркет, 33 класс, доска, ламинат; icq на телефон. скачать jimm бесплатно; перевод сайта

8 Comments


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

    Quote | Posted December 17, 2007, 10:41 pm

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

    Quote | Posted December 18, 2007, 9:59 am

  3. Конечно можно повтыкать везде 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

  4. Уважаемый автор! Спасибо. Голову ломал как же по ssh в vi мне файлик в кодировке 1251 исправить.

    Quote | Posted May 23, 2008, 3:56 pm

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

    Quote | Posted October 13, 2008, 5:41 pm

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

    Quote | Posted October 21, 2008, 7:39 pm

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

    Quote | Posted January 17, 2009, 6:44 pm

  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
    чтобы увидеть результат.

    Quote | Posted February 12, 2010, 2:54 am

Leave a reply