Обсуждение:HOWTO ru RU.utf8 Gentoo way

Материал из Gentoo Linux Wiki

Перейти к: навигация, поиск

Содержание

[править] UTF-8 vs utf8

Вот тут:

LANG=ru_RU.UFT-8
LC_CTYPE="ru_RU.UFT-8"
LC_NUMERIC="ru_RU.UFT-8"

Может надо UTF-8?


Скорее надо ru_RU.utf8. Именно так называется русская юникодовая локаль. --Delph 18:45, 7 Ноя 2004 (GMT)

у меня после выполнения

$ locale -a | grep -i utf | more 

показывает варианты исключительно с .utf8 lowercase и без пробелов и тире так что ориентироватся надо на собственные переменные :.Горыныч 11:48, 27 Авг 2004 (GMT)


В общем, если установить локаль без тире и маленькими буквами, то как минимум OSD в иксах перестает работать.

Так же стандартом является UTF-8, а не utf8 или другой вариант написания. У меня тоже locale выводит маленькими буквами и без тире, но я на это забил и использую UTF-8 и считаю, что это баг glibc.

Наглядный пример:

$ echo "qwe" | LANG="ru_RU.utf8" osd_cat
Locale not available, expect problems with fonts.
Error initializing osd: Default font not found
$ echo "qwe" | LANG="ru_RU.UTF-8" osd_cat

--RuslanZakirov

Есть несоответствие имени локали, создаваемой glibc (ru_RU.utf8) имени, требуему Xlib (ru_RU.UTF-8). Ставить надо UTF-8 ($LANG=ru_RU.UTF-8), иначе x-терминалы, кроме Konsole от KDE, отказываются вводить русские буквы, и не только... Выдается сообщение об ошибке: the locale is not supported by Xlib. Для порядка нужно создать алиас в файле usr/share/locale/locale.alias: ru_RU.UTF-8 ru_RU.utf8, тогда команда locale -a выдаст оба имя, но и без этого почему-то все работает как в консоли, так и в Иксах.

--Genia

[править] Последние версии glibc собираются с ru_RU.UTF-8 уже "из коробки"

Может быть, в HOWTO в разделе Создание локали стоит слегка изменить порядок, примерно, так:

Последние полгода glibc собиается с ru_RU.UTF-8 уже "из коробки". Так что сначала проверьте, может у вас уже всё есть

locale -a | grep ru

Если получите:

ru_RU
ru_RU.koi8r
ru_RU.utf8
ru_UA
ru_UA.utf8

у вас уже все есть, переходите к установке локали, иначе создайте локаль командой:

localedef --no-archive -c -i ru_RU -f UTF-8 ru_RU 

Обратите внимание на опцию --no-archive она указывает на то, что локаль не надо упаковывать в архив. Если вы забудете указать эту опцию, то после обновления библиотеки glibc вам придется повторить этот шаг снова.

Примечание: Трудно ожидать, что в новых glibc русская utf8-локаль будет выброшена, поэтому опция --no-archive и последующие Обратите внимание похоже потеряли смысл.

Согласен. Но даже сейчас некоторые ставят генту 1.4 с дисков, и там все траблы с локалью будут во всей красе. Тут плавное обновление сыграло злую шутку - я, на пример, не могу сказать точно, с каких версий каких пакетов все заработало. Хотя вроде следил и в тред на линухшопе кидал. Придется перечитаь.

[править] locales.build

Для экономии времени компиляции, а также для более "чистой" системы, существует флаг userlocales. При установленном данном флаге glibc создает только те локали, которые указаны в файле /etc/locales.build. Для русскоязычнях пользователей достаточно следующих локалей:

Файл: /etc/locales.build
POSIX
ru_RU
ru_RU.utf8

При желании, можно указать еще и ru_RU.koi8r.


С данными локалями юникод полностью работает. За исключением следующей ошибки:

bash# locale
Locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=ru_RU.utf8
LC_CTYPE=POSIX
LC_NUMERIC=POSIX
LC_TIME=POSIX
LC_COLLATE=ru_RU.utf8
LC_MONETARY=POSIX
LC_MESSAGES=POSIX
LC_PAPER=ru_RU.utf8
LC_NAME=ru_RU.utf8
LC_ADDRESS=ru_RU.utf8
LC_TELEPHONE=ru_RU.utf8
LC_MEASUREMENT=ru_RU.utf8
LC_IDENTIFICATION=ru_RU.utf8
LC_ALL=

Что система пытается установить в качестве дефолтовой локали - я так и не нашел. В доках по glibc сказано, что LC_ALL - это просто макрос, подставляющий всем LC_* переменным указанное значение. Пытался указывать дополнительные локали en_US/ISO-8859-1 и en_US.UTF-8/UTF-8. Но что-то это не шибко помогло.

Если указать значение LC_ALL=POSIX - то все нормально, никаких ошибок. Но если указать LC_ALL=ru_RU.utf8, то появляются 3 ошибки:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

Че ему надо? :)Ему надо перекомпилять glibc, после этого ошибки пропали.

--Delph 18:45, 7 Ноя 2004 (GMT)

[править] Как оно должно быть

После долгих ковыряний, заработала следующая комбинация:

Файл: /etc/locales.build
С
POSIX
en_US
en_US.UTF-8/UTF-8
ru_RU
ru_RU.UTF-8/UTF-8
Code: genlop -i glibc
   * sys-libs/glibc-2.3.4.20041102
   Install date: Sat Nov 13 13:20:01 2004
   USE="nls nptl nptlonly userlocales -pic -build -erandom -hardened -multilib -debug -nomalloccheck"
Code: locale -a
C
en_US
en_US.utf8
POSIX
ru_RU
ru_RU.utf8
Файл: /etc/env.d/00locale
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_MESSAGES="POSIX"
LANG="ru_RU.utf8"

Все работает. Никаких претенций, пока.. :) Только вот одно не понятно: я в locales.build назвал локаль с чарсетом UTF-8 ru_RU.UTF-8. Однако, после компиляции получил локаль с чарсетом UTF-8 называющуюся ru_RU.utf8. :) Но это пофигу. Главное - работает! В консоли. В иксах.

Прописывать надо так, как сказано в комментарии locales.build, т.е. брать имя локали из /usr/share/i18n/locales, а имя charmaps из /usr/share/i18n/charmaps. не важно, как их потом изображает glibc.

Code: большой тест
delph@parkan ~ $ echo большой тест юникода в дженте > ~/большой_тест
delph@parkan ~ $ enca ~/большой_тест
Universal transformation format 8 bits; UTF-8

С - нет такой локали С, см. /usr/share/i18n/locales, есть POSIX его достаточно, см. также комментарий в locales.build.

Да я бы и рад чтобы ее не было, так как особой нужды в ней нет. Но создает ее Глибси само. Постоянно. Хочу я этого - или не хочу...

Интересно, где создает? Что-то не замечал.Если ее выкинуть из locales.build и, возможно, из /etc/env.d/01locale или что там у вас, то она не появляется.


--Delph 20:19, 17 Ноя 2004 (GMT)



[править] Терминалы

К вопросу о терминалах. Кто какие терминалы юзает? С юникодом, естественно. Интересны личные конфиги.

Сам пользуюсь gnome-terminal. Все вроде устраивает, кроме того, что он очень уж "гномовский". А гном я никак не использую. Как-то fluxbox мне ближе. :) Поэтому хочу чего-нибудь другого. Но с наскока ничего стоящего, работающего "из коробки" - не нашел. Поэтому и возник такой вопрос к другим юзерам с юникодом...

--Delph 19:30, 25 Янв 2005 (GMT)


Я использую rxvt-unicode. Отличный терминал, быстрый, держит юникод. Правда, полупрозрачность AFAIK он не поддерживает, но для меня это небольшая потеря. Также, юникод держат uxterm, konsole и mlterm.

Вот мой конфиг для urxvt (добавить в Xdefaults)

Rxvt*colorBD: blue
Rxvt*colorUL: green
Rxvt*loginShell: true
Rxvt*scrollBar: false
Rxvt*foreground: white
Rxvt*background: #000052
Rxvt*font: -*-terminus-medium-*-*-*-14-*-*-*-*-*-*-*
Rxvt*boldFont: -*-terminus-bold-*-*-*-14-*-*-*-*-*-*-
Rxvt*saveLines: 1000
Rxvt*geometry: 126x48+0+0


--Nickolay 20:41, 25 Янв 2005 (GMT)

А я вот попытался локализовать текстовый режим... (обобщу.) ну шрифт, указанный в HOWTO конечно страшненький... надо будет попробовать варианты. болд смотрится гораздо симпатичнее... ter-k16b кажись...

Кодировка файлов естественно не меняется. файлы нужно перекодировать в ручную (если требуется). Хотя здесь наверное стоит написать о возможности работы с файлами в других кодировках. правда это актуально скорее для программеров.

bash 2.05 с текстовой консолью в юникоде дружит плохо... всмысле ввод в командной строке русских букв работает, но глючит с длиной. bash 3.00 работает нормально, но в /etc/portage/package.keywords надо прописать app-shells/bash ~x86

man так и не научился выражаться в юникоде... и что с этим делать? В остальном вроде все в порядке...

Ман умеет работать в юникоде. Достаточно посмотреть на его исходники. Лично я для себя развернул пакет, конвертнул тексты сообщений на русском из koi8-r в утф, запаковал обратно и собрал ман. Теперь он говорит по русски на утф. (С Mplayer абсолютно аналогичная ситуация.) Но это немного через задницу. А как сделать правильно - непонятно. Видимо придется написать для них гентоо-патчи, чтобы смотрели на флаг USE=unicode и конвертили свои тексты из koi в утф прямо при установке.

motor тоже глючит (это такая IDE тектового режима), но это его проблема. rhide - вообще по черному глючит... :) наверное вообще не умеет в юникоде...

так что vim рулит. кто бы меня еще научил быстро по файлам навигировать...

---Dron 07:54, 1 Мар 2005 (GMT)

Странность тут одна. Локаль стоит, locale выдает все как полоежено. шрифты тоже стоят. и keymap тоже... русские буквы в консоли прекрасно отображаются. но почему-то все программы разговаривают со мной на другом языке (вероятно на koi8r). всмысле я ничего не вижу... к чему бы это? Dron.

Кстати еще помечу. система KDE, там все чики-пуки.. все русское, красивое. проблема именно с консолью(Konsole), она как-то упорно не принимает UTF-8. всмысле и сообщения не показывает, и с редактированием строки по русски тоже проблемы...

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

Может кто поможет найти проблему с консолью? Я уже всю голову себе сломал думая... если у меня LC_MESSAGES стоит в ru_RU.UTF-8, и вывод букв тоже воркает, то я не понимаю почему я вообще не вижу сообщений, а одни квадратики... Ж((( И локаль ru_RU.utf8 стоит несомненно. все что можно пересобрал... где я ошибся???

Dron 08:40, 9 Мар 2005 (GMT)



Несколько советов

Для удаления тормознутости fluxbox:

Файл: flux-utf8-slow.patch
diff -ur fluxbox-0.9.11.orig/src/FbTk/Font.cc fluxbox-0.9.11/src/FbTk/Font.cc
--- fluxbox-0.9.11.orig/src/FbTk/Font.cc        2004-11-19 14:01:39.000000000 +0200
+++ fluxbox-0.9.11/src/FbTk/Font.cc     2004-12-24 19:19:46.015735856 +0200
@@ -293,7 +293,7 @@
     // create the right font implementation
     // antialias is prio 1
 #ifdef USE_XFT
-    if (antialias) {
+    if (antialias || m_utf8mode) {
         m_fontimp.reset(new XftFontImp(0, m_utf8mode));
     }
 #endif //USE_XFT

По поводу USE=disablexmb он мне не помог(( А как патч ставить

Собираем mplayer так: cd /usr/portage/media-video/mplayer/

ebuild mplayer-1.0_pre6.ebuild unpack

iconv -f koi8-r /var/tmp/portage/mplayer-1.0_pre6/work/MPlayer-1.0pre6a/help/help_mp-ru.h > /tmp/mp

mv /tmp/mp /var/tmp/portage/mplayer-1.0_pre6/work/MPlayer-1.0pre6a/help/help_mp-ru.h

ebuild mplayer-1.0_pre6.ebuild merge

--Duke 10:18, 9 Мар 2005 (GMT)



Тормоза fluxbox можно удалить пересобрав его с флагом disablexmb см. Gentoo Forums:

Файл: /etc/portage/package.use
x11-wm/fluxbox disablexmb

#emerge fluxbox


Для установки baselayout с поддержкой utf8 нужно поправить следующее (для тех, кто пользуется стабильной веткой)

Файл: /etc/portage/package.keywords
# Using testing version of baselayout with unicode support
sys-apps/baselayout ~x86
sys-libs/readline ~x86
sys-apps/sysvinit ~x86
app-shells/bash ~x86

#emerge baselayout

--CDigger 14:44, 8 Май 2005 (GMT)

[править] cyrilyc support

a kak sdelat' tak, chtoby ves' Gentoo byl na English, no v KDE mozhno bylo by pereklyuchat' na russian raskladku, chtob pechatat' text?

u menya:

lng@base ~ $ locale LANG=ru_RU.UTF-8 LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL=

no pri etom v menu nano:

                          [ ��в�� Файл ]

^G �_омо^O �Wапи^R Чи�Bа^Y �_�@ед^K �R�K�@^C Тек�_о ^X �R�K�E^J �R�K�@^W �_ои�A^V След C^U �^�Bм ^T �^�@�Dо

chto delat'?

[править] ru-utf

А зачем используется ru4? Чем она хороша? Есть же ru-utf, в интернете её найти и запихать в /usr/share/keymaps/i386/qwerty/ru-utf.map.gz не проблема. Тогда всякие заморочки типа

dumpkeys -c koi8-r | loadkeys --unicode и
DUMPKEYS_CHARSET="koi8-r" 
не нужны.

ru-utf тоже хорошая раскладка и заточена специльно под unicode (переключение рус/анг при помощи ctrl)

Dlbmok--83.237.35.217 20:41, 16 Авг 2005 (GMT)

[править] broken link

http://dev.gentoo.org/~sergey/unicode-guide.html так же как и ссылка на ibm'овскую страницу. кто-нибудь найдите оригиналы и поправьте ссылки plz.

[править] XLC_LOCALE

Приведенный вами файл не работает, т.к. в тексте у вас сливаются названия опций и их значения, например "encoding_nameUTF-8", "mb_cur_max6", "state_depend_encodingFalse". Но это не важно XLC_LOCALE у меня в Fedora Core 4 практически такой же, но в gtk1 по-прежнему каракули. В чем еще может быть проблема?

УРАААААААААААА!!! Скопировал XLC_LOCALE из ASPLinux 10 xorg-x11-libs-6.8.1 все заработало!!!!

Ключевые слова для поиска: Fedora-Core-4 FC4 utf8 utf-8 gtk gtk1 8 бит xmms gtkrc xorg xorg-x11-libs 8.6.2 iso10646

  • а diff можно показать, в чем там разница то? ΩDmitri 02:03, 17 октября 2005 (GMT)

Запостил подправленный вариант, работает. Не понятно как в этой вики прикреплять файлы, а так бы можно было в виде файла хранить.

Остается пару вопросов:

  • Откуда взялся этот файл? Где первоисточник этих изменений?
  • Зачем мы правим en_US.UTF-8? может можно создать ru_RU.UTF-8?
  • Как пропихнуть изменения в мейнстрим?

--RuslanZakirov

Наверно отослать bugreport для всеобщего счастья. en_US.UTF-8 правится для того что бы на машине на которой только английский выставлен, остальные языки тож были читабельны. Первоисточник этого файла мне не известен. ΩDmitri 03:46, 28 октября 2005 (GMT)

____ Господа, ссылка на wiki.fantoo.ru не работает уже давно, мне кажется что идеологически верно создавать ru_RU.UTF-8 . Если у кого остались файлы локали с fantoo, переразместите пожалуйста... Или алгоритм, как их создать. Я по памяти не помню.

[править] Русские маны

Русские маны (app-i18n/man-pages-ru) в независимости от локали инсталятся в кодировке KOI8-R. В локали ru_RU.utf8 они отображаются примерно так:

ein
      ls, dir, vdir - xUxIAEO OIAAOOEIIA EAOAIICA
iauio
      ls [IDAEE] [AEAEI...]
      dir [AEAEI...]
      vdir [AEAEI...]

(это был man ls). Перекодировка манов в UTF8 не помогает, т. к. groff не умеет нормально работать с юникодом. Кто как борется? --grooz 09:55, 17 декабря 2005 (GMT)

В changelog'е на gnu.org они божились, что добавили в 1.19.2 поддержку "cyrillic letters" для utf8, но что-то результата не заметно. В latin1 опять половина символов заменяется на спецартефакты а-ля <D9>, а в utf8 попрежнему обязательно надо им перекодировать содержимое страницы -f iso8859-1 -t utf8. Придется ждать дальше и курить changelog'и. Правда нашел ссылку на groff-unicode. Пробовать не рискнул. Обсуждение там же. --balodja


Костыль найден (by michwill B-):

vi /usr/bin/nroffx
	/usr/bin/nroff -Tlatin1 -c -mandoc |  iconv -f=koi8-r -t=utf-8
chmod a+x /usr/bin/nroffx
vi /etc/man.conf
	....
	NROFF           /usr/bin/nroffx


Ктобы мог подумать, что все решалось так просто. Кстати, можно прям в man.conf сунуть это дело, то есть:

NROFF       /usr/bin/nroff -mandoc -Tlatin1 -c | iconv -f koi8-r -t utf8

--Balodja 11:02, 8 января 2006 (GMT)

[править] GTK+-1 и xorg 7.0

Народ, ну как можно теперь без костылей обойтись? Все работает "из коробки"? --Winterheart 17:50, 9 июля 2006 (UTC)


Нет не работает. И никогда не будет. И дело ни в X.Org а в самом GTK1. --MooSE 07:36, 10 июля 2006 (UTC)

[править] XMMS-удаление?

В связи с удалением xmms из portage предлагаю удалить и соответствующую информацию из данного HOWTO (и рекомендовать всем переходить на Audacious IMHO)

[править] gpm+UTF-8

В линуксовой консоли gpm по средней мышиной кнопке вместо русских букв вставляет квадратики, которые на самом деле являются символами в кодировке KOI8-R либо ISO8859-5... Кто нашел решение этой проблемы? Подбробности тут(на английском): http://bugs.gentoo.org/show_bug.cgi?id=173161

[править] Проблемы с LC_NUMERIC="ru_RU.UTF-8"

Обнаружена следующая проблема. Когда переменная LC_NUMERIC содержит "ru_RU.UTF-8" функция localeconv() возвращает в качестве разделителя тысяч(lconv->thousands_sep) символ U+2002, последовательность байт в UTF-8: "E2 80 82".

$ cat /usr/share/i18n/locales/ru_RU
...
LC_NUMERIC
decimal_point             "<U002C>"
thousands_sep             "<U2002>"
grouping                  3;3
END LC_NUMERIC
...

В большинстве шрифтов(кроме terminus и еще неск-х) глиф(изображение) для этого символа отсутсвует, поэтому вместо пустого разделителя тысяч отображаются квадратики. Эффект наблюдается с wget в числах, соответствующих кол-ву байт:

Устанавливается соединение с linux.rz.ruhr-uni-bochum.de|134.147.32.114|:80... ановлено.
Запрос HTTP послан, ожидается ответ... 206 Partial Content
Длина: 57 314 907 (55M), 38 223 491 (36M) осталось [text/plain]

33% [+++++++++++++++                                ] 19 225 036    2.03K/s  ET

Также проверить корректность отображения символа разделителя тысяч можно запустив такую команду:

$ printf "100\xe2\x80\x82000\n"
100 000

Я поставил

LINGUAS="ru"
LANGUAGE="ru_RU.UTF-8"

LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="POSIX"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=""

И проблемы с локалью, разделителями (запятые в wget, в частности), perl'ом (или python'ом точно не помню кто именно из них дико ругался на неправильные настройки локали) ушли сами собой и все встало на свои места.

[править] java

В этой статье грозно говорится не ставить LANG=ru_ru.UTF-8 т.к. это привет к вводу арабских символов в джава программах вместо ожидаемых русских. За то что предупредили большое спасибо, но хотелось бы знать еще и как решать эту проблему. Пробовал перебирать различные русские и не русские локали для freemind'а, ничего не помогает, все время вводится арабский вместо русского, даже при LANG=C.

После обновлнения freemind'а до версии 0.9.0_beta15(это мило создание утянуло за собой еще кучу джавушного "мусора") вместо русских букв стали вводиться арабские. Даунгрей проблему не решил. Пока я не полез его обновлять русский ввод в нем отлично работал.

Подскажите пожалуйста где чинить.

Личные инструменты