かんだです。
#とりあえず Win95 で電八。メールアドレスをどう整理すべきか。。。

Akihiro Furudo <A.Furudo / luvnet.com>
        Fri, 9 Oct 1998 08:42:44 +0900 の
        [ruby-list:9897] お礼と、 Ruby/Gtk(i18n)   について質問

Akihiro> 札幌の古堂です。立石さんありがとうございます。

Akihiro> Ruby/Gtkをインストールしました。
Akihiro> 
Akihiro> まず、locale を実行したら ja_JP.ujis とでてきたので、
Akihiro> gtk-1.0.4を ./configure --with-locale=ja_JP.ujis でインストールしました。
Akihiro> 
Akihiro> 次に、ruby-gtk-0.13.tar.gz を ruby-1.1c5/ext/ に突っ込んで、rubyをmake
Akihiro> して、できあがったrubyで次のスクリプトを走らせてみたところ、ボタンの字
Akihiro> が表示されませんでした。どうしたらいいのでしょうか?
Akihiro> 
Akihiro> Xサーバの設定のほうに何か問題があるのでしょうか。Slackware-3.4で、
Akihiro> XFree86 3.3.1を使っています。実行時にはフォントまわりの処理はしている
Akihiro> ようですし、ボタンの大きさもそれらしくなっています。

  えーっとですね、ruby/gtkで日本語使うには以下の設定が必要です。
  ・locale がちゃんと使えること。
  ・X で FontSet が使えること。
  ・gtk で日本語が使えること。
  ・gtk と rubyスクリプトの文字コードを揃えること。

  とりあえず、問題の切り分けが必要かと思います。
  うちの slack 環境でハマってたのは FontSet なので、その確認プログラムをつけます。試して
みてください。FontSet で複数の font が出ればおーっけーです。下のログだと、X_LOCALEを使っ
て環境変数 LANG が ja のときにうまくいってます。

---------------------------------------------------------------------------------------
$ ls
fontset.c
$ ldconfig -p|grep 'libX11.so '
	libX11.so (ELF) => /usr/X11R6/lib/libX11.so
$ gcc fontset.c -L/usr/X11R6/lib -lX11
$ echo $LANG
ja
$ ./a.out 

setlocale
locale not supported by C library
locale: C

createFontSet

about FontSet
Locale:       C
BaseFontName: *
fonts:
  -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1
$ gcc -DX_LOCALE fontset.c -L/usr/X11R6/lib -lX11
$ ./a.out

setlocale
locale: ja

createFontSet

about FontSet
Locale:       ja
BaseFontName: *
fonts:
  -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1
  -jis-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1983-0
  -misc-fixed-medium-r-normal--14-130-75-75-c-70-jisx0201.1976-0
$ LANG=C ./a.out

setlocale
locale: C

createFontSet

about FontSet
Locale:       C
BaseFontName: *
fonts:
  -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1
---------------------------------------------------------------------------------------
#include <X11/Xlib.h>
#ifdef X_LOCALE
#include <X11/Xlocale.h>
#else
#include <locale.h>
#endif

#define FONTSET_NAME "*"

void setlocale0() {
  printf("\nsetlocale\n");
  if (!setlocale (LC_ALL,""))
    printf("locale not supported by C library\n");

  if (!XSupportsLocale ()) {
	printf("locale not supported by Xlib, locale set to C\n");
	setlocale (LC_ALL, "C");
  }

  if (!XSetLocaleModifiers ("")) {
	printf("can not set locale modifiers\n");
  }

  printf("locale: %s\n", setlocale (LC_ALL,NULL));
}


XFontSet createFontSet0(char *name) {
  Display *display;
  XFontSet fontset;
  int missing_charset_count;
  char **missing_charset_list;
  char *def_string;
  int i;

  printf("\ncreateFontSet\n");
  display = XOpenDisplay(NULL);
  fontset = XCreateFontSet(display, name, &missing_charset_list,
						   &missing_charset_count, &def_string);

  if (0 < missing_charset_count) {
	printf("missing_carset:\n");
	for (i=0; i<missing_charset_count; i++)
	  printf("  %s\n", missing_charset_list[i]);
  }

  if (def_string == NULL)
	printf("def_srting: %s\n", def_string);

  return fontset;
}

void dumpFontSet0(XFontSet fontset) {
  XFontStruct **font_struct_list;
  char **font_name_list;
  int i,j;

  printf("\nabout FontSet\n");
  if (fontset != NULL) {
	printf("Locale:       %s\n", XLocaleOfFontSet(fontset));
	printf("BaseFontName: %s\n", XBaseFontNameListOfFontSet(fontset));

	printf("fonts:\n");
	j = XFontsOfFontSet(fontset, &font_struct_list, &font_name_list);
	for (i=0; i<j; i++) {
	  printf("  %s\n", font_name_list[i]);
	}
  }
}

int main() {
  XFontSet fontset;
  
  setlocale0();
  fontset = createFontSet0(FONTSET_NAME);
  dumpFontSet0(fontset);
  return(0);
}
---------------------------------------------------------------------------------------