いけがみです。

wxHaskell http://wxhaskell.sourceforge.net/ で遊んでいます。
# ゆくゆくは仕事で使おうかなあと思っています。

wxHaskell の元となっている GUI library は wxWidgets といいます。
最近は、UNIX USER 誌でも紹介されました。
  UNIXUSER 2004 8月号 特別企画
  wxWidgets でクロスプラットフォーム GUI アプリケーションを作ろう
  高林 哲 p.62-- 
  http://www.unixuser.jp/magazine/2004/200408.html

それで、とりあえず日本語を表示できるかどうか、試してみました。
そのためには wxWindow_SetLabel を変えればよさそうです。
テキストフィールドを経由した日本語文字列の受け渡しができるかどうかは
まだ確かめておりません。これから他の不具合を調べてみます。

  環境: RedHat Fedora Core 2
  wxWidgets 2.4.2 (configure --with-gtk --disable-unicode)
  wxHaskell 0.7   (configure --with-opengl)
    wxWidgets と wxHaskell は source tarball からコンパイルしています。
    (参照: このメールの最後のパッチ)

  手順:
  1. Haskell プログラム internat.hs を書く。 (このメールに付属)
  2. コンパイル
     % ghc -package wx -o internat internat.hs
  3. 実行ファイルと同じディレクトリに ja という名前のディレクトリを作る
  4. ja/internat.po を作成 (このメールに付属)
  5. コマンド msgfmt -c -o ja/internat.mo ja/internat.po を実行
  6. (環境変数 LANG が ja_JP であるのを確かめて) internat を実行

手順はまわりくどいですが、ソースコードの変更はごくわずかです。
wxHaskell に興味がある方は試してみてはどうでしょうか。

Haskell ソースコード:
-- internat.hs
module Main where

import CForeign
import Graphics.UI.WX
import Graphics.UI.WXCore

main = start mainLoop

mainLoop = 
    do l <- localeCreate 0 0         -- default locale
       c <- newCString "internat"
       localeAddCatalog l c
       
       f <- frame [text := "hello"]
       q <- button f [text := "quit", on command := close f]
       set f [clientSize := sz 500 100]
       return ()
------------------------------------------------------------------------
internat.po (* EUC 漢字コードで作ること *)
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL / ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: wxHaskell i18n sample\n"
"POT-Creation-Date: 2004-07-14 19:21+0900\n"
"PO-Revision-Date: 2004-07-14 21:49+0900\n"
"Last-Translator: Ikegami Daisuke <hoge / hoge>\n"
"Language-Team: hoge\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=EUC-JP\n"
"Content-Transfer-Encoding: 8bit\n"

msgid "hello"
msgstr "こんにちは"

msgid "quit"
msgstr "終了"

------------------------------------------------------------------------
パッチ
--- wxhaskell-0.7/wxc/src/ewxw/eljwindow.cpp	2004-02-21 00:13:29.000000000 +0900
+++ wxhaskell-intl-0.7/wxc/src/ewxw/eljwindow.cpp	2004-07-14 20:58:18.000000000 +0900
@@ -45,7 +45,7 @@
 	
 EWXWEXPORT(void, wxWindow_SetLabel)(void* _obj, char* _title)
 {
-	((wxWindow*)_obj)->SetLabel(_title);
+	((wxWindow*)_obj)->SetLabel(_(_title));
 }
 	
 EWXWEXPORT(int, wxWindow_GetLabel)(void* _obj, void* _buf)



--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/