#!/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()