This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


[Xen-devel] Correct management of .po files for translation

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] Correct management of .po files for translation
From: "Daniel P. Berrange" <berrange@xxxxxxxxxx>
Date: Wed, 4 Apr 2007 17:02:23 +0100
Delivery-date: Wed, 04 Apr 2007 09:01:19 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Reply-to: "Daniel P. Berrange" <berrange@xxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.4.1i
In updating Fedora rawhide to work against xen-unstable.hg (3.0.5) I noticed
that there is now gettext support for translating the error messages returned
from XenAPI in xm. Unfortauntely the way the .po files have been created is
completely wrong & useless for translators to work kwith.

First there is no master .pot file - merely an english 'translation'. Since
the convention is for the untranslated strings to be in english to start with,
providing an english .po  file is redundant unless you specialize it to a
variant like  en_GB.po

The core problem though is that the catalog file ..


..does not contain untranslated strings at all - it is instead full of symbolic

  msgstr "Internal error: %(1)s."

  msgstr "This map already contains %(1)s -> %(2)s."

  msgstr "The method %(1)s is unsupported."

  msgstr "The method %(1)s takes %(2)s argument(s) (%(3)s given)."

There are two critical reasons why msgid should always contain the master
english untranslated string:

  - Translators need to be able to compare the original english alongside
    the translated text to ensure accurate translations. Referring to external
    files to find the english is not practical

  - The msgmerge tool used to periodically update the catelogs looks at
    the msgid entries to identify added / removed / editted strings. If
    the msgid is a symbolic constant it'll never be able to identify strings
    which have changed & thus mark them as needing re-translation

Basically the code is abusing the gettext translation service to do both the
constant -> string conversion & the translation in one go. The normal way to
do the constant -> string conversion is to have a statically declared hash
table in the application itself. This contains the master english strings
annotated with  N_(...string..).  The xgettext program will then generate
the .pot files automatically in the correct format.

I'm attaching an example to show how this ought to work in the Xen case.
The makefiles could be hooked up to automatically run

  xgettext --keyword=N_ -o xen-xm.pot tools/python/xen/xm/XenAPI.py

Which generates a sensible catalog file looking like

  #: tools/python/xen/xm/XenAPI.py:58
  #, python-format
  msgid "Internal error: %(1)s."
  msgstr ""

  #: tools/python/xen/xm/XenAPI.py:59
  #, python-format
  msgid "This map already contains %(1)s -> %(2)s."
  msgstr ""

  #: tools/python/xen/xm/XenAPI.py:60
  #, python-format
  msgid "The method %(1)s is unsupported."
  msgstr ""

For each new language the translators simply do xen-xm.pot to  fr_FR.po, and 
fill in the msgstr field. When xen-xm.pot is later updated, the translations
can in turn be updated using  msgmerge, etc, etc

|=- Red Hat, Engineering, Emerging Technologies, Boston.  +1 978 392 2496 -=|
|=-           Perl modules: http://search.cpan.org/~danberr/              -=|
|=-               Projects: http://freshmeat.net/~danielpb/               -=|
|=-  GnuPG: 7D3B9505   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505  -=| 

Attachment: xen-gettext.patch
Description: Text document

Xen-devel mailing list
<Prev in Thread] Current Thread [Next in Thread>