# Недорусифицированная консоль

## Magister Cistiorum

Русифицировал консоль согласно документации с официального сайта и вике.

В /etc/env.d/02locale написал следующее:

```
LANG=en_US.UTF8

LC_COLLATE=C
```

В /etc/profile.d/ положил скрипт, меняющий LANG на ru_RU.UTF8:

```
export LANG=ru_RU.UTF8
```

В /etc/conf.d/consolefont выставил cyr-sun16 в качестве шрифта, используемого в консоли:

```
consolefont="cyr-sun16"
```

Включил запуск /etc/init.d/consolefont в default runlevel:

```
rc-update add consolefont default
```

Поправил LINGUAS в make.conf:

```
LINGUAS="ru en"
```

и сделал потом

```
emerge --update --deep --with-bdeps=y --newuse world
```

В результате консоль русифицировалась - сокращённые названия месяцев в выводе ls -l пишутся по-русски, vim все сообщения выводит по-русски и т.д. Но в некоторых случаях в выводе тех или иных приложений наблюдаются "прямоугольники" вместо символов (предположительно кириллических): man выводит "прямоугольники" вместо кириллицы в сообщениях (например, если запросить несуществующую man-страницу), в интерфейсе elinks (например, в окне поиска) в надписях все кириллические символы тоже заменены на "прямоугольники", периодически эти же "прямоугольники" проскакивают в выводе emerge (хотя по большей части кириллица там выводится в читаемом виде). Пробовал менять шрифт с cyr-sun16 на ter-k14n - ситуация не поменялась (если не считать появления боли в глазах после пары минут созерцания этого вырвиглазного шрифта  :Smile:  ).

В чём я накосячил?

----------

## FlaTHunTeR

 *Magister Cistiorum wrote:*   

> В /etc/env.d/02locale написал следующее:
> 
> ```
> LANG=en_US.UTF8
> 
> ...

 

Вот здесь.

Есть такая замечательная утилита: eselect называется. Настоятельно рекомендую ознакомиться!

А если вынастолько ленивы что вам некогда, то:

```

-> USE="unicode" emerge -uND world

```

```

-> cat /etc/rc.conf|grep uni | grep -v "#"

unicode="YES"

```

```

-> cat /etc/locale.gen (можно оставить вообще только ru_RU.UTF-8 UTF-8)

en_US.UTF-8 UTF-8

ru_RU.UTF-8 UTF-8

```

```

-> eselect locale list |grep ru_RU.utf8 

  [10]  ru_RU.utf8

```

```

-> eselect locale set 10 (смотреть вывод предыдущей команды: номер может не совпадать с примером)

```

```

-> locale-gen

```

ну и нужен шрифт поддерживающий юникод: к примеру terminus(consolefont="ter-k14n")

PS: мог и забыть что-нибудь...

----------

## TigerJr

```
locale -a
```

Я думаю там всё уже есть скомпилено... 

Скорее у тебя часть либов собрались после бинарей которые использовали либы, если так 

перебери мир ещё раз и проверь всё ли перебралось

```

emerge -uND world 

emerge world -ep
```

----------

## Magister Cistiorum

 *FlaTHunTeR wrote:*   

> В /etc/env.d/02locale написал следующее:
> 
> Есть такая замечательная утилита: eselect называется. Настоятельно рекомендую ознакомиться!
> 
> 

 

Собственно, если верить вике (и исходникам eselect-овского модуля locale), eselect locale set ничего не делает, кроме как выставляет LANG в /etc/env.d/02locale. Так что никаких принципиальных преимуществ использование eselect перед ручной правкой этого конфига не даёт. Выставлять LANG=ru_RU.utf8 сразу в /etc/env.d/02locale я не стал, потому что, опять же если верить вике:

 *Quote:*   

> В некоторых случаях (когда /etc/init.d/consolefont еще не отработал - например, в процессе загрузки fsck может что-нибудь выводить) это приводит к выводу нечитаемых сообщений - белые квадраты вместо кириллических символов.

 

Потому вынес включение русской локали в /etc/profile.

 *TigerJr wrote:*   

> 
> 
> ```
> locale -a
> ```
> ...

 

Именно так.

 *TigerJr wrote:*   

> 
> 
> Скорее у тебя часть либов собрались после бинарей которые использовали либы, если так 
> 
> перебери мир ещё раз и проверь всё ли перебралось
> ...

 

Сделал. Не помогло. Я же правильно понял, что проверка, всё ли перебралось, заключается в том, чтобы в выводе emerge world -ep напротив всех пакетов должно стоять "R"?

Как показала enca, man выводит сообщения об ошибках в koi8-r. Собственно, перегонка iconv-ом из koi8-r в utf8 подтвердила это - пропущенные через iconv, эти сообщения обретали вполне читабельный русскоязычный вид.

Что характерно, даже на некоторых англоязычных man-страницах наблюдаются белые прямоугольники вместо отдельных символов. Попробовал такую man-страницу сохранить в файл и посмотреть, что про него скажет enca. Получилось вот такое:

```
$ man emerge > man\ emerge.txt

$ enca man\ emerge.txt

Universal transformation format 8 bits; UTF-8

  Surrounded by/intermixed with non-text data

  Doubly-encoded to UTF-8 from ISO-8859-5

```

Определить, в какой кодировке выводит elinks, даже не знаю как. Там интерактивный интерфейс - его в файл не сохранишь, чтобы enca-е скормить его потом или через iconv пропустить.

Вобщем воз и ныне там.

----------

## FlaTHunTeR

 *Magister Cistiorum wrote:*   

> 
> 
> Собственно, если верить вике (и исходникам eselect-овского модуля locale), eselect locale set ничего не делает, кроме как выставляет LANG в /etc/env.d/02locale. Так что никаких принципиальных преимуществ использование eselect перед ручной правкой этого конфига не даёт.
> 
> 

 

Ну никто и не говорил что она делает что-то принципиально другое. А ознакомиться я рекомендовал со всей утилитой, а не отдельным её модулем.

 *Magister Cistiorum wrote:*   

> 
> 
> Я же правильно понял, что проверка, всё ли перебралось, заключается в том, чтобы в выводе emerge world -ep напротив всех пакетов должно стоять "R"?
> 
> 

 

Не правильно. Это означает что данные пакеты уже установлены и будут пересобраны. Ответ на этот вопрос можно найти в логе.

PS: На той же странице вики есть таки пункт 7.5.3, но вот насколько он необходим сейчас неизвестно. С момента последней правки того пункта прошло почти 2 года.

PPS: А вообще из меня в этом деле советчик не ахти. Сам я никогда не русифицировал консоль т.к. не вижу в этом смысла.  :Smile: 

----------

## Magister Cistiorum

 *FlaTHunTeR wrote:*   

> 
> 
> PS: На той же странице вики есть таки пункт 7.5.3, но вот насколько он необходим сейчас неизвестно. С момента последней правки того пункта прошло почти 2 года.

 

А вот тут действительно я клювом прощёлкал. Спасибо. Вообще, по результатам гуглинга выяснил, что помимо этого метода, есть ещё как минимум 2: ставить man из оверлея (название оверлея, увы, не сохранил) и использовать man-db вместо man. Собственно, последним способом и воспользовался.

По поводу elinks: проблема в самом elinks, не в локализации. Решается добавлением 

```
set terminal.linux.charset = "koi8-r" 
```

 в elinks.conf. Вроде бы должны пофиксить в будущих релизах.

----------

## burik666

[quote="Magister Cistiorum"] *FlaTHunTeR wrote:*   

> 
> 
> По поводу elinks: проблема в самом elinks, не в локализации. Решается добавлением 
> 
> ```
> ...

 

А почему koi8-r если локаль UTF-8?

----------

