2011-02-16 53 views
3

我正在考虑使用Haskell开发一个小型商业项目。该程序必须国际化(针对简体中文,具体而言),我的客户要求它应该以一键式Windows Installer形式提供。所以基本上这些都是我现在面临两个问题:如何做i18n并创建Haskell程序的Windows Installer?

  1. 的的I18n Haskell程序:在Internationalization of Haskell programs描述的方法做工作(部分)如果我改变执行程序的命令从LOCALE=zh_CN.UTF-8 ./MainLANG=zh_CN.UTF-8 ./Main(I”在Ubuntu 10.10上工作),但是,中文输出是乱码,我不知道为什么。
  2. 在Windows上发布:我习惯在Linux下工作并使用Cabal构建我的Haskell程序的&包,但从一个cabalized Haskell包创建一键式Windows Installer最自然的方法是什么?包bamse正确的路要走吗?

------对于第一个问题------

我所做的详细信息为:

$ hgettext -k __ -o messages.pot Main.hs 
$ msginit --input=messages.pot --locale=zh_CN.UTF-8 
    (Edit the zh_CN.po file, adding Chinese translation) 
$ mkdir -p zh_CN/LC_MESSAGES 
$ msgfmt --output-file=zh_CN/LC_MESSAGES/hello.mo zh_CN.po 
$ ghc --make Main.hs 
$ LANG=zh_CN.UTF-8 ./Main 

输出功率为这样的:

terminal output

这表明gettext实际上正在工作,但由于某种原因生成的zh_CN.mo文件已损坏(我的猜测)。我很确定我的zh_CN.po文件是用UTF-8编码的。另外,除了使用System.IO.putStrLn之外,我还尝试了System.IO.UTF8.putStrLn来输出字符串,这也不起作用。

+0

嘿,不错。我甚至不知道bamse是否存在... – 2011-02-16 04:08:20

回答

4

对于第一个问题,解决的办法是从Codec.Binary.UTF8.String添加decodeString到了gettext功能__,就像这样:

__ :: String -> String 
__ = decodeString . unsafePerformIO . getText 

然后一切都运行得很好。

0

对于第一个问题,是否有可能您没有安装正确的字体或字体未设置为在终端中使用。

+0

我不这么认为......我的终端没有问题,显示以UTF-8编码的普通中文字符。请参阅我的修订。 – Aufheben 2011-02-16 06:42:46

相关问题