# flatxml2po

Converts flat XML (.xml) files to Gettext PO format, a simple monolingual and single-level XML.

## Usage

    flatxml2po [options] <xml> <po>
    po2flatxml [options] <po> <xml> [-t <base-xml>]

Where:

<xml> | is a valid .xml file or directory of those files
<po> | is a directory of PO or POT files
<base-xml> | is a template or the original file before translation. required for roundtrips preserving extraneous data.

Options (flatxml2po):

`--version`

  show program’s version number and exit

`-h, --help`

  show this help message and exit

`--manpage`

  output a manpage based on the help

`--progress=PROGRESS`

  show progress as: dots, none, bar, names, verbose

`--errorlevel=ERRORLEVEL`

  show errorlevel as: none, message, exception, traceback

`-i INPUT, --input=INPUT`

  read from INPUT in xml format

`-x EXCLUDE, --exclude=EXCLUDE`

  exclude names matching EXCLUDE from input paths

`-o OUTPUT, --output=OUTPUT`

  write to OUTPUT in po, pot formats

`-S, --timestamp`

  skip conversion if the output file has newer timestamp

`-r ROOT, --root=ROOT`

  name of the XML root element (default: “root”)

`-v VALUE, --value=VALUE`

  name of the XML value element (default: “str”)

`-k KEY, --key=KEY`

  name of the XML key attribute (default: “key”)

`-n NS, --namespace=NS`

  XML namespace uri (default: None)

Options (po2flatxml):

`--version`

  show program’s version number and exit

`-h, --help`

  show this help message and exit

`--manpage`

  output a manpage based on the help

`--progress=PROGRESS`

  show progress as: dots, none, bar, names, verbose

`--errorlevel=ERRORLEVEL`

  show errorlevel as: none, message, exception, traceback

`-i INPUT, --input=INPUT`

  read from INPUT in po, pot formats

`-x EXCLUDE, --exclude=EXCLUDE`

  exclude names matching EXCLUDE from input paths

`-o OUTPUT, --output=OUTPUT`

  write to OUTPUT in xml format

`-t TEMPLATE, --template=TEMPLATE`

  read from TEMPLATE in xml format

`-S, --timestamp`

  skip conversion if the output file has newer timestamp

`-r ROOT, --root=ROOT`

  name of the XML root element (default: “root”)

`-v VALUE, --value=VALUE`

  name of the XML value element (default: “str”)

`-k KEY, --key=KEY`

  name of the XML key attribute (default: “key”)

`-n NS, --namespace=NS`

  XML namespace uri (default: None)

`-w INDENT, --indent=INDENT`

  indent width in spaces, 0 for no indent (default: 2)

## Formats Supported

Check flat XML format document to see to which extent the XML format is supported.

## Examples

This example looks at roundtrip of flat XML translations as well as recovery of existing translations.

First we need to create a set of POT files.:

    flatxml2po -P lang/en pot/

All .xml files found in the `lang/en` directory are converted to Gettext POT files and placed in the `pot` directory.

If you are translating for the first time then you can skip the next step. If you need to recover your existing translations then we do the following:

    flatxml2po -t lang/en lang/zu po-zu/

Using the English XML files found in `lang/en` and your existing Zulu translation in `lang/zu` we create a set of PO files in `po-zu`. These will now have your translations. Please be aware that in order for that to work 100% you need to have both English and Zulu at the same revision, if they are not you will have to review all translations.

You are now in a position to translate your recovered translations or your new POT files.

Once translated you can convert back as follows:

    po2flatxml -t lang/en po-zu/ lang/zu

Your translations found in the Zulu PO directory, `po-zu`, will be converted to XML using the files in `lang/en` as templates and placing your new translations in `lang/zu`.

To update your translations simply redo the POT creation step and make use of pot2po to bring your translation up-to-date.

## Limitations

Indentation only supports spaces (specified with `--indent` greater than zero) or flattened (no indentation, everything on a single line; specified with `--indent` set to zero). Tabs are not supported using po2flatxml.