Translation environment20

From Gramps
Revision as of 12:53, 3 October 2012 by Romjerome (talk | contribs) (How it works)
Jump to: navigation, search

This page describes the first translation environment.

Last use was Gramps 2.0.x branch.

How it works

  • pygettext -- Python equivalent of xgettext[1]

Many systems (Solaris, Linux, Gnu) provide extensive tools that ease the internationalization of C programs. Most of these tools are independent of the programming language and can be used from within Python programs. Martin von Loewis' work[2] helps considerably in this regard.

There's one problem though; xgettext is the program that scans source code looking for message strings, but it groks only C (or C++). Python introduces a few wrinkles, such as dual quoting characters, triple quoted strings, and ,raw strings. xgettext understands none of this.

Enter pygettext, which uses Python's standard tokenize module to scan Python source code, generating .pot files identical to what GNU xgettext[3] generates for C and C++ code. From there, the standard GNU tools can be used.

A word about marking Python strings as candidates for translation. GNU xgettext recognizes the following keywords: gettext, dgettext, dcgettext, and gettext_noop. But those can be a lot of text to include all over your code. C and C++ have a trick: they use the C preprocessor. Most internationalized C source includes a #define for gettext() to _() so that what has to be written in the source is much less. Thus these are both translatable strings:

   gettext("Translatable String")
   _("Translatable String")

Python of course has no preprocessor so this doesn't work so well. Thus, pygettext searches only for _() by default, but see the -k/--keyword flag below for how to augment this.

NOTE: pygettext attempts to be option and feature compatible with GNU xgettext where ever possible. However some options are still missing or are not fully implemented. Also, xgettext's use of command line switches with option arguments is broken, and in these cases, pygettext just defines additional switches.


pygettext [options] inputfile ...

Files and directory