How to do i18n and create Windows Installer of Haskell programs?
        Posted  
        
            by 
                Aufheben
            
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Aufheben
        
        
        
        Published on 2011-02-16T02:21:15Z
        Indexed on 
            2011/02/16
            7:25 UTC
        
        
        Read the original article
        Hit count: 273
        
I'm considering using Haskell to develop for a little commercial project. The program must be internationalized (to Simplified Chinese, to be specific), and my customer requests that it should be delivered in a one-click Windows Installer form. So basically these are the two problems I'm facing now:
- I18n of Haskell programs: the method described in Internationalization of Haskell programs did work (partially) if I change the command of executing the program from 
LOCALE=zh_CN.UTF-8 ./MaintoLANG=zh_CN.UTF-8 ./Main(I'm working on Ubuntu 10.10), however, the Chinese output is garbled, and I've no idea why is that. - Distribution on Windows: I'm used to work under Linux and build & package my Haskell programs using Cabal, but what is the most natural way to create a one-click Windows Installer from a cabalized Haskell package? Is the package bamse the right way to go?
 
------ Details for the first problem ------
What I did was:
$ 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
And the output was like:

This indicates gettext is actually working, but for some reason the generated zh_CN.mo file is broken (my guess). I'm pretty sure my zh_CN.po file is encoded in UTF-8. Plus, aside from using  System.IO.putStrLn, I also tried System.IO.UTF8.putStrLn to output the string, which didn't work either.
© Stack Overflow or respective owner