[erlang-questions] Best Practices: Localization of Erlang Applications. Also, Error Messages!

Richard Carlsson carlsson.richard@REDACTED
Thu Jul 14 14:33:52 CEST 2011


On 07/13/2011 09:19 PM, Alex Arnon wrote:
> We're building a nontrivial Erlang application, which will provide a
> potentially high-volume, public RESTful Web Service. As part of the API,
> we will be providing both informative text (status, labels, layout
> templates) and error messages. A twofold question, then, to the
> experienced Grandmasters in the audience:
> 1. How have you implemented localization of text? This includes
> parameterized format strings.

At Klarna we are using (and maintaining) the gettext library, and it 
works very well. You'll find the latest version at 
https://github.com/etnt/gettext - the version at Jungerl is very much 
out of date.

In particular, you'll probably want to use the new (not yet documented) 
macro ?STXT(...) instead of the ?TXT(...) macro. This is less error 
prone, since the fields and their meaning are more easily identified and 
do not have to be listed in order of occurrence. For example:

   ?STXT("Hello, $name$! Today's date is $date$ and the time is $time$.",
         [{date, current_date_as_string()},
          {time, current_time_as_string(),
          {name, customer_name(CustomerID)}])

For the documentation (not very up to date, sorry), run 'make docs' and 
open doc/index.html in a browser.

Tobbe also made some support for gettext in rebar:
http://www.redhoterlang.com/entry/138dc1b1f8720f5c4f38864e4f0c338f

To make it easier to actually get the translations into the system, or 
update translations as the original text changes, you may also want to 
use the Polish tool:

http://www.redhoterlang.com/entry/8af2641026c0dfa27e54cb0da57eb392

http://www.youtube.com/watch?v=UdhE2YOkBCU

http://www.redhoterlang.com/entry/98951c7196e0d91999bb238de5defe47


> 2. Has anyone used composite error values? For example, instead of
> {error, badarg}, use {error, {badarg, [{arg, ArgumentName}, {message,
> LocalizedMessageId}, {message_args, [...]}... Should we steer clear of
> these, and if so, what alternative would you suggest?

Who is expected to read these messages? End users, or developers? For 
developers, it's better if the message is in plain English. First, you 
may have people from different countries working on your code. Second, 
it's harder to google for the error message if the one you got was in 
Spanish, but the only people who have previously reported the problem 
got their messages in German. At the very least, always provide a 
summary or short identifier in English.

     /Richard



More information about the erlang-questions mailing list