/doc/.scripts/compile-translation-catalogs
#! | 81 lines | 65 code | 16 blank | 0 comment | 0 complexity | 544bfb6209deb3053c3bbcf832df7847 MD5 | raw file
Possible License(s): Apache-2.0
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- '''
- :codeauthor: :email:`Pedro Algarvio (pedro@algarvio.me)`
- :copyright: Š 2013 by the SaltStack Team, see AUTHORS for more details.
- :license: Apache 2.0, see LICENSE for more details.
- 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!r} 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()