GTKにおいて文字を入力することのできるWidgetはGtkEntryとGtkText (およびGtkEntryの派生WidgetであるGtkSpenButton)です.
Gtk+1.1.7よりどちらともにMultiByteのTextが扱えるようになりました. ただ, localeの設定をきちんとしていないといけません. 以下にlocaleの設定方法について述べます.
| localeの設定 |
gtkはfontsetが指定されていればXDrawString16()を, fontで指定されていればXDrawString()を呼び出すようになっています. 日本語を表示させるにはXDrawString16()を呼び出さないといけないので fontsetを指定しなければいけません. これはrcファイルを 書きかえることで対応できます.
例えばgtk/testgtkのrcファイルはgtk/testgtkrcとte文字 のlocaleに対応していませんので「libxpg4」を リンクする必要があります.
gtk/testgtk.cをコンパイルする時を例にとってみると
gcc -lxpg4 `gtk-config --libs` `gtk-config --cflags` testgtk -o .libs/testgtk
と libxpg4をlinkするように指定します. gtk-configにpatchをあてて -lxpg4 を追加できるようにするのもいいかも知れません.
上の1,2だけでentryの日本語入力は可能です. ただ アプリケーションを立ちあげた時に
locale not supported by C library
とエラーメッセージがでてくるかも知れません. ここで /usr/share/locale/ja_JP.EUC に LC_COLLATE,LC_TYPE,LC_TIMEの3つのファイルがあることを確認してください. おそらく初期状態ではLC_TYPEしかありませんので
LC_COLLATE -> ../en_US.ISO_8859-1/LC_COLLATE
LC_TYPE
LC_TIME -> ../en_US.ISO_8859-1/LC_TIME
と linkをはってください. (最近のversionでどうなっているかまでは確認していません)
ここでもしかすると
/usr/share/locale/ja_JP.EUC -> /usr/share/locale/en_US.ISO_8859-1
となってる人がいるかも知れません(Netscapeの日本語化の為に このようにしている人も多いと思います) これではGTKで日本語がでませんので netscapeだけ別のlocaleを読むように します. 具体的には
# mkdir /usr/local/netscape/locale
# ln -s /usr/share/locale/en_US.ISO_8859-1 /usr/loca/netscape/locale/ja_JP.EUC
として, Netscapeを起動するときには
% env PATH_LOCALE=/usr/local/netscape/locale netscape
とするようにしてください.
Linuxの場合
Linux (libc5/X_LOCALEを使用する場合)
FreeBSDの場合と同じです. ということでpaste
gtkはfontsetが指定されていればXDrawString16()を, fontで指定されていればXDrawString()を呼び出すようになっています. 日本語を表示させるにはXDrawString16()を呼び出さないといけないので fontsetを指定しなければいけません. これはrcファイルを 書きかえることで対応できます.
例えばgtk/testgtkのrcファイルはgtk/testgtkrcというのがありますので,
style "default"
{
# fontset = "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*,*"
font = "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*"
}
ここの fontsetの前の#を取り, font = の行を#でコメントアウトします. うまく表示されない場合は ,*"ではなく,*--14-*" とした方がいいのかも知れません.
LinuxはOSのsetlocale()でなくXのXSetlocale()を使用します. よってGTK+を-DX_LOCALEつきでmakeしないといけません.
configureでうまくいけばいいのですが, うまくいかないようなので
# configure --with-locale=ja_JP.EUC
としたほうがよさそうです. gtk/Makefile, gdk/Makefileに-DX_LOCATEが ちゃんとついていることを確認してください.
XFree86 3.3.2以降ではこの作業は必要ありません.
/usr/X11R6/lib/X11/locale/ja/XLC_LOCALEに以下のpatchをあてます. (XFree86 3.3.2のLOCALEと変更してもかまいません)
--- XLC_LOCALE.orig Fri Dec 12 02:54:25 1997
+++ XLC_LOCALE Fri Dec 12 02:54:03 1997
@@ -35,6 +35,7 @@
}
font {
primary JISX0201.1976-0:GR
+ substitute JISX0201.1976-0:GR
vertical_rotate all
}
}Linux (glibc2の場合)
glibc2.1はlibwbcmsは必要ありませんが, 日本語localeは別packageになっていることが多いようです.
最近 Linuxにおけるlocaleの見解がでたようで ja_JP.eucJPが公式のlocaleらしいです.
MkLinux/LinuxPPC
Solaris
その他のUNIX系OS
の2点で日本語の入力が可能になります.
Windows/BeOS
その他の注意点
| 動作確認を行った環境 |
![]()