【问题标题】:How to do i18n and create Windows Installer of Haskell programs?如何做 i18n 和创建 Haskell 程序的 Windows Installer?
【发布时间】:2011-06-28 01:36:00
【问题描述】:

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

  1. Haskell 程序的 I18n:如果我将执行程序的命令从 LOCALE=zh_CN.UTF-8 ./Main 更改为 LANG=zh_CN.UTF-8 ./Main(我正在使用 Ubuntu 10.10),Internationalization of Haskell programs 中描述的方法确实有效(部分),但是,中文输出是乱码,不知道是什么原因。
  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

输出是这样的:

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

【问题讨论】:

  • 你好。我什至不知道 bamse 的存在......

标签: haskell internationalization software-distribution


【解决方案1】:

第一个问题,有没有可能是你没有安装正确的字体或者没有设置在终端中使用的字体。

【讨论】:

  • 我不这么认为...我的终端显示以UTF-8编码的普通汉字没有问题。请看我的修改。
【解决方案2】:

对于第一个问题,解决方法是将decodeStringCodec.Binary.UTF8.String添加到gettext函数__中,像这样:

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

然后一切正常。

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    相关资源
    最近更新 更多