Files
edx-platform/i18n/make_dummy.py
Ned Batchelder 2abd647375 Always add Plural metadata to dummy translations.
When this was conditional, we'd have plural info in some files, not in
others. Then we'd merge them, and msgcat would add wacky markers to
indicate the difference, and the metadata wouldn't parse.
2014-01-24 16:17:46 -05:00

71 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python
# Generate test translation files from human-readable po files.
#
# Dummy language is specified in configuration file (see config.py)
# two letter language codes reference:
# see http://www.loc.gov/standards/iso639-2/php/code_list.php
#
# Django will not localize in languages that django itself has not been
# localized for. So we are using a well-known language (default='eo').
# Django languages are listed in django.conf.global_settings.LANGUAGES
#
# po files can be generated with this:
# django-admin.py makemessages --all --extension html -l en
# Usage:
#
# $ ./make_dummy.py <sourcefile>
#
# $ ./make_dummy.py ../conf/locale/en/LC_MESSAGES/django.po
#
# generates output to
# edx-platform/conf/locale/eo/LC_MESSAGES/django.po
import os, sys
import polib
from i18n.dummy import Dummy
from i18n.config import CONFIGURATION
from i18n.execute import create_dir_if_necessary
def main(file, locale):
"""
Takes a source po file, reads it, and writes out a new po file
in :param locale: containing a dummy translation.
"""
if not os.path.exists(file):
raise IOError('File does not exist: %s' % file)
pofile = polib.pofile(file)
converter = Dummy()
for msg in pofile:
converter.convert_msg(msg)
# Apply declaration for English pluralization rules so that ngettext will
# do something reasonable.
pofile.metadata['Plural-Forms'] = 'nplurals=2; plural=(n != 1);'
new_file = new_filename(file, locale)
create_dir_if_necessary(new_file)
pofile.save(new_file)
def new_filename(original_filename, new_locale):
"""Returns a filename derived from original_filename, using new_locale as the locale"""
orig_dir = os.path.dirname(original_filename)
msgs_dir = os.path.basename(orig_dir)
orig_file = os.path.basename(original_filename)
return os.path.abspath(os.path.join(orig_dir, '../..', new_locale, msgs_dir, orig_file))
if __name__ == '__main__':
# required arg: file
if len(sys.argv) < 2:
raise Exception("missing file argument")
# optional arg: locale
if len(sys.argv) < 3:
locale = CONFIGURATION.get_dummy_locale()
else:
locale = sys.argv[2]
main(sys.argv[1], locale)