# rc2po

Converts Windows Resource .rc files to Gettext PO format.

## Usage

    rc2po [options] <rc> <po>
    po2rc [options] -t <rc> <po> <rc>

Where:

<rc> | is a valid Windows Resource file or directory of those files
<po> | is a directory of PO or POT files

Options (rc2po):

`--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 rc format

`-x EXCLUDE, --exclude=EXCLUDE`

  exclude names matching EXCLUDE from input paths

`-o OUTPUT, --output=OUTPUT`

  write to OUTPUT in po, pot formats

`-t TEMPLATE, --template=TEMPLATE`

  read from TEMPLATE in rc format

`-S, --timestamp`

  skip conversion if the output file has newer timestamp

`-P, --pot`

  output PO Templates (.pot) rather than PO files (.po)

`--charset=CHARSET`

  charset to use to decode the RC files (default: cp1252)

`-l LANG, --lang=LANG`

  LANG entry (default: LANG_ENGLISH)

`--sublang=SUBLANG`

  SUBLANG entry (default: SUBLANG_DEFAULT)

`--duplicates=DUPLICATESTYLE`

  what to do with duplicate strings (identical source text): merge, msgctxt (default: ‘msgctxt’)

Options (po2rc):

`--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 rc format

`-t TEMPLATE, --template=TEMPLATE`

  read from TEMPLATE in rc format

`-S, --timestamp`

  skip conversion if the output file has newer timestamp

`--charset=CHARSET`

  charset to use to decode the RC files (default: utf-8)

`-l LANG, --lang=LANG`

  LANG entry

`--sublang=SUBLANG`

  SUBLANG entry (default: SUBLANG_DEFAULT)

`--threshold=PERCENT`

  only convert files where the translation completion is above PERCENT

`--fuzzy`

  use translations marked fuzzy

`--nofuzzy`

  don’t use translations marked fuzzy (default)

## Formats Supported

Note

This implementation is based mostly on observing WINE .rc files, these should mimic other non-WINE .rc files.

## Examples

This example looks at roundtrip of Windows Resource translations as well as recovery of existing translations.

First we need to create a set of POT files.

    rc2po -P lang/ pot/

All .rc files found in the `lang/` 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 recovery your existing translations then we do the following:

    rc2po -t lang zu po-zu/

Using the English .rc files found in `lang` and your existing Zulu translation in `zu` we create a set of PO files in `po-zu`. These will now have your translations. Please be aware that in order for the 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. Also the .rc files may be in different encoding, we cannot at the moment process files of different encodings and assume both are in the same encoding supplied.

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

Once translated you can convert back as follows:

    po2rc -t lang/ po-zu/ zu/

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

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

## Issues

If you are recovering translation using `rc2po -t en.rc xx.rc xx.po` then both en.rc and xx.rc need to be in the same encoding.

There might be problems with MENUs that are deaply nested.