xml2po is a simple Python program which extracts translatable content from free-form XML documents and outputs gettext compatible POT files. Translated PO files can be turned into XML output again.
It can work it's magic with most "simple" tags, and for complicated tags one has to provide a list of all tags which are "final" (that will be put into one "message" in PO file), "ignored" (skipped over) and "space preserving".
The program follows the usual GNU command line syntax, with long options starting with two dashes (`-'). A summary of options is included below.
-a, --automatic-tags
-k, --keep-entities
-e, --expand-all-entities
-m, --mode=TYPE
-o, --output=FILE
-p, --po-file=FILE
-r, --reuse=FILE
-t, --translation=FILE
-u, --update-translation=LANG.po
-l, --language=LANG
-h, --help
-v, --version
To create a POT template FCbook.potF[] from an input file FCbook.xmlF[], which consists of FCchapter1.xmlF[] and FCchapter2.xmlF[] (external entities), run:
/usr/bin/xml2po -o book.pot book.xml chapter1.xml chapter2.xml
To expand entities use the -e option:
/usr/bin/xml2po -e -o book.pot book.xml
After translating FCbook.potF[] into FCLANG.poF[], merge the translations back by using -p option for each XML file:
/usr/bin/xml2po -p LANG.po -o book.LANG.xml book.xml /usr/bin/xml2po -p LANG.po -o chapter1.LANG.xml chapter1.xml /usr/bin/xml2po -p LANG.po -o chapter2.LANG.xml chapter2.xml
If you used the -e option to expand entities, you should use it again to merge back the translation into an XML file:
/usr/bin/xml2po -e -p LANG.po -o book.LANG.xml book.xml
When base XML file changes, the real advantages of PO files come to surface. There are 2 ways to merge the translation. The first is to produce a new POT template file (additionally use the -e if you decided earlier to expand entities). Afterwards run msgmerge to merge the translation with the new POT file:
/usr/bin/msgmerge -o tmp.po LANG.po book.pot
Now rename FCtmp.poF[] to FCLANG.poF[] and update your translation. Alternatively, xml2po provides the -u option, which does exactly these two steps for you. The advantage is, that it also runs msgfmt to give you a statistical output of translation status (count of translated, untranslated and fuzzy messages). Additionally use the -e if you decided earlier to expand entities:
/usr/bin/xml2po -u LANG.po book.xml
This manual page was written by Daniel Leidert FCdaniel.leidert@wgdd.deF[] for the Debian system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2 any later version published by the Free Software Foundation.