如何进行i18n并创建Haskell程序的Windows安装程序?

3

我正在考虑使用Haskell开发一个小型商业项目。该程序必须国际化(具体来说是简体中文),我的客户要求以一键式Windows安装程序的形式交付。所以,基本上现在我面临着两个问题:

  1. Haskell程序的国际化:如果我将执行程序的命令从LOCALE=zh_CN.UTF-8 ./Main更改为LANG=zh_CN.UTF-8 ./Main(我正在使用Ubuntu 10.10),那么Haskell程序的国际化中描述的方法确实可以部分地工作,但是中文输出是乱码的,我不知道为什么。
  2. 在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

然后输出结果如下:

terminal output

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


嘿,不错啊。我甚至不知道“bamse”是什么... - Robert Massaioli
2个回答

4

对于第一个问题,解决方案是在gettext函数__中添加来自Codec.Binary.UTF8.StringdecodeString,像这样:

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

然后一切都正常运作。


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

我不这么认为...我的终端显示UTF-8编码的普通中文字符没有问题。请查看我的修改。 - Aufheben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接