Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
[Caml-list] Printf and i18n
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2002-04-18 (06:47)
From: Daniel de Rauglaudre <daniel.de_rauglaudre@i...>
Subject: Re: [Caml-list] Printf and i18n

On Wed, Apr 17, 2002 at 07:37:19PM +0200, Jérôme Marant wrote:

>   I was thinking about writing a small gettext-like module
>   for handling internationalisation of strings in OCaml programs.
>   But it is quite useless if it cannot work with printf: the
>   printf format parameter looks like a string but it isn't
>   (printf is using some internal magics).

In my program GeneWeb, I use internationalization with printf. I have
a function ftransl function defined like this (revised syntax):

  value ftransl lang (fmt : format 'a 'b 'c) : format 'a 'b 'c =
     valid_format fmt (transl lang (Obj.magic fmt : string));

The function "transl", called inside this function, takes the language
and the format fmt constrained to be a string and applies the translation.

The function "valid_format" checks that this resulting translation
has the same % defined in the same order than fmt. Return the translated
format if ok. If not ok, it returns the initial format, but you can
fail, if you prefer.

Therefore, instead of
      printf "hello, my name is %s\n" name
you can write:
      printf (ftransl "hello, y name is %s\n") name

For the translations, I use a lexicon file, containing a list of entries
which I want to be i18n. It is an idea I took from Caml Light. The first
string, without language, is the format to be translated, in a vehicular
language (actually English), and I give the translation in each language
I want. E.g. an entry can be:

     hello, my name is %s\n
 en: hello, my name is %s\n
 es: buenos dias, me llamo %s\n
 fr: bonjour, je m'appelle %s\n

To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: