Обсуждение: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(это мило создание утянуло за собой еще кучу джавушного "мусора") вместо русских букв стали вводиться арабские. Даунгрей проблему не решил. Пока я не полез его обновлять русский ввод в нем отлично работал.
Подскажите пожалуйста где чинить.
