<div class="gmail_quote">On Thu, Sep 29, 2011 at 6:54 PM, Paulo Pocinho <span dir="ltr">&lt;<a href="mailto:pocinho@gmail.com">pocinho@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hello list.<br>
<br>
I&#39;ve been trying to figure a nice method to provide localisation. An<br>
application is deployed using a conventional installer. The end-user<br>
is not required to have the Haskell runtimes, compiler or platform.<br>
The application should bundle ready to use translation data. What I am<br>
after is simple; an intuitive way that an interested translator, with<br>
little knowledge of Haskell, can look at and create valid translation<br>
data.<br></blockquote><div><br></div><div>I&#39;ve been meaning to bundle up some i18n/l10n code that I have lying around from previous compiler projects.</div><div><br></div><div>What I was using was a gettext/printf template haskell function that can be hunted for with xgettext, which expands to code that reads translated .po files for the current module at two different times. Once at compile time to check that any printf-style format strings are compatible across each translation, and again later at runtime to allow for additional translations to be added.</div>
<div><br></div><div>The biggest headache I have is that doing all this requires a pretty hairy .cabal file, and I haven&#39;t yet figured out how to package that up nicely for use in libraries.</div><div><br></div><div>I&#39;ll admit I have only ever really tested this with a joke en@lolcat translation, which I auto-translate with perl, though I admit if I could find a nice perl module for generating zalgo-style text, en@zalgo would be pretty neat to auto-generate as well.</div>
<div><br></div><div>I&#39;m not sure its considered &quot;best practice&quot;, since I haven&#39;t bundled it up for third party use yet, but its <b>my</b> practice. ;)</div><div><br></div><div>-Edward Kmett</div><div><br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
This is what I&#39;ve been looking at lately. The first thing I noticed<br>
was the GNU gettext implementation for Haskell. The wiki page [1] has<br>
a nice explanation by Aufheben. The hgettext package is found here<br>
[2].<br>
<br>
I don&#39;t know if this is a bad habit, but I had already separated the<br>
dialogue text in the code with variables holding the respective<br>
strings. At this time, I thought there could be some other way than<br>
gettext. Then I figured how to import localisation data, that the<br>
program loads, from external files. The data type is basically a tuple<br>
with variable-names associated with strings. This is bit like the<br>
file-embed package [3].<br>
<br>
Still uncomfortable with i18n, I learned about the article &quot;I18N in<br>
Haskell&quot; in yesod blog [4]. I&#39;d like to hear more about it.<br>
<br>
What is considered the best practice for localisation?<br>
<font color="#888888"><br>
--<br>
[1] <a href="http://www.haskell.org/haskellwiki/Internationalization_of_Haskell_programs" target="_blank">http://www.haskell.org/haskellwiki/Internationalization_of_Haskell_programs</a><br>
[2] <a href="http://hackage.haskell.org/packages/archive/hgettext/" target="_blank">http://hackage.haskell.org/packages/archive/hgettext/</a><br>
[3] <a href="http://hackage.haskell.org/package/file-embed" target="_blank">http://hackage.haskell.org/package/file-embed</a><br>
[4] <a href="http://www.yesodweb.com/blog/2011/01/i18n-in-haskell" target="_blank">http://www.yesodweb.com/blog/2011/01/i18n-in-haskell</a><br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</font></blockquote></div><br>