В GTK проблема с русским шрифтом

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

В GTK проблема с русским шрифтом

Сообщение CoverStory » 04.09.2006 19:23:19

Создал приложение с интерфейсом GTK, написал русский текст в GTK_LABEL_NEW, но он отобразился в приложении абракадаброй. Кто знает как это победить?
CoverStory
новенький
 
Сообщения: 95
Зарегистрирован: 09.02.2006 18:21:42
Откуда: Семипалатинск

Сообщение vstem » 04.09.2006 20:13:12

в качестве кодировки попробуйте использовать unicode...
vstem
новенький
 
Сообщения: 22
Зарегистрирован: 16.05.2005 15:27:06
Откуда: Minsk, Belarus

Сообщение debi12345 » 04.09.2006 22:01:17

Чтобы это "uinicode" пахало - иногда нужно пару пинков. Если не лень прочтите следующее :

-------------------

HOWTO GTK1 with UTF8
Материал из Википедии - свободной
энциклопедии.

Стоит начать с того, что после дружного
перехода на Xorg версии 6.8.2 с версии 6.8.0
абсолютно у всех пользователей с
кодировкой ru_RU.UTF-8 начали вылазить баги
в отображении русских букв - либо
квадратики либо зючки. И начали люди
биться над решением задачи, и в конце
концов пользователи Fedora 2 надавили на
девелоперов Redhat, и те, проведя
исследования, нашли причины и способы
устраниея проблем.
Проблемы

* Неверно работает локаль ru_RU.UTF-8 во
всех версиях Xorg выше 6.8.0
* Неверно вычисляется метрика и resX +
resY для экранного разрешения 1280x1024
* Xorg "забил" на решение этих двух
проблем в принципе - баг в багзилле
есть уже полтора года
* Неверно работают метрики
непропорциональных TTF шрифтов (Arial итд)

Быстрое решение

Чтобы быстро пофиксить проблему, не
вникая в суть вопроса, установите
ебилд gtk1-utf8-fix-1.0.ebuild скачав его тут
https://fantoo.ru/svn/app-i18n/gtk1-utf8-fix/

Затем запустите etc-update или dispatch-conf для
обновления некоторых файлов в /etc/gtk

после этого убираем "вредные" файлы

cd ~
mv .gtkrc .gtkrc.old
mv .gtkrc.mine .gtkrc.mine.old

ВСЁ! Проверяем, запуская ваши
приложения:

xmms
gmplayer
scirbus
ardour

Исследование

Для начала нам необходимо понять суть
происходящего.

проанализировав содержимое каталога

ls /usr/lib/X11/locale/ | grep UTF-8

мы получим список:

el_GR.UTF-8
en_US.UTF-8
ja_JP.UTF-8
ko_KR.UTF-8
pt_BR.UTF-8
th_TH.UTF-8
zh_CN.UTF-8
zh_HK.UTF-8
zh_TW.UTF-8

Ага! Кодировки ru_RU.UTF-8 просто НЕТ!!! на
неё откровенно забили, оставив бедным
"руссиянам" на пропитание только en_US.UTF-8
Точка.

Далее, заглянув в каталог

ls /etc/gtk | grep UTF-8

мы не найдём ничего... попробуем по
другому

ls /etc/gtk | grep ru

и увидим

gtkrc.ru.koi8-r
gtkrc.ru_RU.iso88595

т.е. две никому не нужные кодировки :(
Теория

* Необходимо положить локаль ru_RU.UTF-8 в
/usr/lib/X11/locale/
* Потом заменить файлы в каталоге
/usr/lib/X11/locale/

compose.dir
locale.alias
locale.dir

на другие, более "правильные, в которых
уже указана ru_RU.UTF-8

* Потом положить в /etc/gtk правильно
названный файл с "правильно"
прописанными шрифтами, такой как:

/etc/gtk/gtkrc.iso-10646-1

и создать симлинка на него:

ln -s /etc/gtk/gtkrc.iso-10646-1 /etc/gtk/gtkrc.ru_RU.UTF-8
ln -s /etc/gtk/gtkrc.ru_RU.UTF-8 /etc/gtk/gtkrc.ru

* установить пакеты corefonts и terminus-font
* рестартовать Xorg.

Решение

Выполняем:

su -
cd /usr/lib/X11/locale/
mkdir /usr/lib/X11/locale/ru_RU.UTF-8
cp -v /usr/lib/X11/locale/en_US.UTF-8/*
/usr/lib/X11/locale/ru_RU.UTF-8/
rm /usr/lib/X11/locale/ru_RU.UTF-8/XLC_LOCALE

далее скачиваем файл

http://chronos.nsu.ru/fantoo/wiki/gtk1_utf8/XLC_LOCALE (ФАЙЛ БЫЛ
ОБНОВЛЁН!)

и копируем его в

cp -v XLC_LOCALE /usr/lib/X11/locale/ru_RU.UTF-8/

теперь удаляем "неправильные" файлы:

rm /usr/lib/X11/locale/compose.dir
rm /usr/lib/X11/locale/locale.alias
rm /usr/lib/X11/locale/locale.dir

далее скачиваем файлы

http://chronos.nsu.ru/fantoo/wiki/gtk1_utf8/compose.dir
http://chronos.nsu.ru/fantoo/wiki/gtk1_ ... cale.alias
http://chronos.nsu.ru/fantoo/wiki/gtk1_utf8/locale.dir

и копируем их в:

cp -v compose.dir /usr/lib/X11/locale/
cp -v locale.alias /usr/lib/X11/locale/
cp -v locale.dir /usr/lib/X11/locale/

Xorg теперь настроен!

....Теперь мучаем GTK1+

далее скачиваем файл

http://chronos.nsu.ru/fantoo/wiki/gtk1_ ... so-10646-1

и копируем его в

cp -v gtkrc.iso-10646-1 /etc/gtk

Теперь создаём симлинки:

ln -s /etc/gtk/gtkrc.iso-10646-1 /etc/gtk/gtkrc.ru_RU.UTF-8
ln -s /etc/gtk/gtkrc.ru_RU.UTF-8 /etc/gtk/gtkrc.ru

ну и последний шаг: заходим в домашний
каталог и выполняем:

cd ~
mv .gtkrc .gtkrc.old
mv .gtkrc.mine .gtkrc.mine.old

Последний шаг - установка шрифтов:

emerge corefonts
emerge terminus-font

далее редактируем /etc/X11/xorg.conf

в секции Section "Files" надо в начале
добавить 2 строчки

FontPath "/usr/share/fonts/terminus"
FontPath "/usr/share/fonts/corefonts"

Самое время перезапустить Xorg ...
Проверка

... и оценить полученные результаты.

Проверять будем в xmms и mplayer

запускаем xmms в любом Xовом терминале:

amax@localhost ~ $ xmms
Message: device: default
Message: fmt 5, channels: 2

не должно вылазить никаких ошибок.

заходим в настройки xmms устанавливаем в
трёх инпутах шрифт:

-xos4-terminus-medium-r-normal-*-*-120-*-*-c-*-iso10646-1

и включаем обе галочки:

* Use fontsets
* Use X font

в случае если xmms у вас собран с патчем
RUSXMMS то при открытии File Selector там должны
быть русские буквы в именах каталогов
и песен, а после добавления в плейлист
вы получите нормальные, автоматически
перекодированные теги

ВЫ МОЖЕТЕ взять ebuild ТУТ

https://fantoo.ru/svn/media-sound/xmms/

чтобы установить полное дерево ebuils
рекомендуется прочитать
http://wiki.fantoo.ru/index.php/HOWTO_Setup_Overlays

Далее. если мы запустим gmplayer в Xовой
консоли мы тоже не должны увидеть
никакой ругани.

amax@localhost ~ $ gmplayer
MPlayer 1.0pre7try2-3.4.4 (C) 2000-2005 MPlayer Team
CPU: Advanced Micro Devices Athlon 64 Clawhammer (Family: 8, Stepping:
8)
Detected cache-line size is 64 bytes
MMX2 supported but disabled
SSE2 supported but disabled
3DNow supported but disabled
3DNowExt supported but disabled
CPUflags: MMX: 1 MMX2: 0 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 0
Скомпилировано для x86 CPU со следующими
расширениями: MMX SSE

vo: X11 running at 1280x1024 with depth 16 and 16 bpp (":0.0" => local
display)
85 аудио & 196 видео кодеков
Установка поддержки LIRC...
mplayer: could not connect to socket
mplayer: No such file or directory
Неудачное открытие поддержки LIRC!
Вы не сможете использовать Ваш пульт
управления

Примерно такой вывод. Во всех меню
должны быть НОРМАЛЬНЫЕ русские буквы!

Примечание: необходимо чтобы mplayer был
скомпилирован с USE=utf8

Заключение

Очень тревожит тот факт что решение
этой проблемы на официальном
http://forums.gentoo.org форуме так и не было
найдено...
делайте выводы, джентельмены..

Дополнительно

При установке экранного разрешения
1280x960 и 1280x800 характеристики resX и resY
вычисляются ПРАВИЛЬНО и шрифты не
коробит.
Получено с
"http://wiki.fantoo.ru/index.php/HOWTO_GTK1_with_UTF8"
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение CoverStory » 04.09.2006 22:10:57

Как ее поставить и где? В Паскале или в GTK?
CoverStory
новенький
 
Сообщения: 95
Зарегистрирован: 09.02.2006 18:21:42
Откуда: Семипалатинск

Сообщение SergKam » 04.09.2006 22:27:04

По моему все гораздо проще. Просто прежде чем выводить чтото напрямую в GTK надо это сконвертить из текущей локали в UTF-8.(кстати какая версия GTK 1 или 2?)
в GLib почитайте про функцию g_locale_to_utf8 (можно в DevHelp - GLiB Reference - Character Set Conversion)
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение CoverStory » 04.09.2006 23:22:59

Моя версия GTK2 и операционка WIN32
CoverStory
новенький
 
Сообщения: 95
Зарегистрирован: 09.02.2006 18:21:42
Откуда: Семипалатинск

Сообщение SergKam » 05.09.2006 21:43:10

вот вот в GTK2 это точно. я сам с этим парился когдато.
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение CoverStory » 06.09.2006 07:23:16

Так в Gimpe и Inkscape русский работает. Там и шрифты русские есть только как их установить в свою прогу?
CoverStory
новенький
 
Сообщения: 95
Зарегистрирован: 09.02.2006 18:21:42
Откуда: Семипалатинск

Сообщение SergKam » 07.09.2006 16:25:28

вот блин(ау. меня не слышно?). С шрифтами у тебя все в порядке, кодировка не та.
все гораздо проще. Просто прежде чем выводить чтото напрямую в GTK надо это сконвертить из текущей локали в UTF-8.
в GLib почитайте про функцию g_locale_to_utf8 (можно в DevHelp - GLiB Reference - Character Set Conversion)
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение Uniser » 07.02.2008 12:09:11

У меня тоже win32 и Gtk2
g_locale_to_utf8 не использовал.
Вывожу в кодировке utf-8 и всё нормально
Правда исходник под виндой тяжело читается :)

а вот под линуксом gtk2 глючит, а gtk1 не выводят русский и даже в gtk_entry не печатаются русские (в отличие от gimp'a )
пока ковыряюсь, надеюсь получится
Uniser
новенький
 
Сообщения: 46
Зарегистрирован: 13.05.2005 23:13:57
Откуда: Украина, Полтава


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru