Records gettext translation messages and synchronizes to message catalogs.
The recorder is attached to an existing translation function keeps track of the inputs and outputs.
The result is a locales directory structure:
<domain>.pot <lang>/ <lang>/LC_MESSAGES <lang>/LC_MESSAGES/<domain>.po ...
This structure is written on process exit.
Note that when the recorder is initialized, it imports any existing message catalog. That is, it’s robust to process startup/shutdown and can operate continuously.
In Python-code, enable the translation recorder by wrapping an existing translation function.
The easiest way to wire this up is by patching the module that holds the function (if possible):
import zope.i18n import translationrecorder # Patch Zope's translation function zope.i18n.translate = translationrecorder.Recorder( zope.i18n.translate, './locales' )
There’s integration included for the Pyramid and Zope/Plone frameworks.
Set the environment variable RECORD_TRANSLATIONS to an existing locales directory and run your server process:
$ mkdir ./locales $ RECORD_TRANSLATIONS=./locales bin/paster serve ...
This requires that the
translationrecorder module is imported. This
is handled automatically on Plone. For other systems:
Technically, the package applies patches against the global translation functions of the applicable frameworks.
- Fixed an issue where a translation would always appear with a default text, even when not present in catalog.
- Fixed an issue where a message with a mapping would not get properly decoded into a message id.
- Fixed issue where a quote appearing in a message id or translation would corrupt on save.
Fixed issue where generated .po-files would result in a syntax error on compilation using pythongettext due to a missing initial dummy message translation.
Patch the translation domain instead of the (higher-level) global translation function.
This fixes an issue where messages would not be recorded with the proper translation domain and the used target languages would not be correctly registered.
- Initial public release.