我正在考虑使用Haskell开发一个小型商业项目。该程序必须国际化(具体来说是简体中文),我的客户要求以一键式Windows安装程序的形式交付。所以,基本上现在我面临着两个问题:
- Haskell程序的国际化:如果我将执行程序的命令从
LOCALE=zh_CN.UTF-8 ./Main
更改为LANG=zh_CN.UTF-8 ./Main
(我正在使用Ubuntu 10.10),那么Haskell程序的国际化中描述的方法确实可以部分地工作,但是中文输出是乱码的,我不知道为什么。 - 在Windows上发布:我习惯于在Linux下工作,并使用Cabal构建和打包我的Haskell程序,但是从cabalized Haskell包创建一键式Windows安装程序的最自然方式是什么? 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
然后输出结果如下:
这表明gettext实际上是正在工作的,但由于某种原因生成的zh_CN.mo文件已经损坏(我猜测)。 我相当确定我的zh_CN.po文件以UTF-8编码。 此外,除了使用System.IO.putStrLn
之外,我还尝试了System.IO.UTF8.putStrLn
来输出该字符串,但也没有起作用。