12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- '''
- :codeauthor: Pedro Algarvio (pedro@algarvio.me)
- compile-translation-catalogs
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Compile the existing translation catalogs.
- '''
- # Import python libs
- import os
- import sys
- import fnmatch
- # Import 3rd-party libs
- HAS_BABEL = False
- try:
- from babel.messages import mofile, pofile
- HAS_BABEL = True
- except ImportError:
- try:
- import polib
- except ImportError:
- print(
- 'You need to install either babel or pofile in order to compile '
- 'the message catalogs. One of:\n'
- ' pip install babel\n'
- ' pip install polib'
- )
- sys.exit(1)
- DOC_DIR = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
- LOCALES_DIR = os.path.join(DOC_DIR, 'locale')
- def main():
- '''
- Run the compile code
- '''
- print('Gathering the translation catalogs to compile...'),
- sys.stdout.flush()
- entries = {}
- for locale in os.listdir(os.path.join(LOCALES_DIR)):
- if locale == 'pot':
- continue
- locale_path = os.path.join(LOCALES_DIR, locale)
- entries[locale] = []
- for dirpath, _, filenames in os.walk(locale_path):
- for filename in fnmatch.filter(filenames, '*.po'):
- entries[locale].append(os.path.join(dirpath, filename))
- print('DONE')
- for locale, po_files in sorted(entries.items()):
- lc_messages_path = os.path.join(LOCALES_DIR, locale, 'LC_MESSAGES')
- print('\nCompiling the \'{0}\' locale:'.format(locale))
- for po_file in sorted(po_files):
- relpath = os.path.relpath(po_file, lc_messages_path)
- print ' {0}.po -> {0}.mo'.format(relpath.split('.po', 1)[0])
- if HAS_BABEL:
- catalog = pofile.read_po(open(po_file))
- mofile.write_mo(
- open(po_file.replace('.po', '.mo'), 'wb'), catalog
- )
- continue
- catalog = polib.pofile(po_file)
- catalog.save_as_mofile(fpath=po_file.replace('.po', '.mo'))
- print('Done')
- if __name__ == '__main__':
- main()
|