Commit 87502969 authored by Ramiro Morales's avatar Ramiro Morales
Browse files

[1.6.x] Fixed #21488 -- Multiple locales treatment in i18n commands.

Removed multiple locales separated by commas variation (that wasn't
working as documented) in favor of simply allowing use of the
``--locale``/``-l`` options more than once for ``makemessages`` and
``compilemessages``.

Thanks Romain Beylerian for the report and Claude, Simon for their help.
parent ddd39262
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ def compile_messages(stdout, locale=None):

    for basedir in basedirs:
        if locale:
            dirs = [os.path.join(basedir, l, 'LC_MESSAGES') for l in (locale if isinstance(locale, list) else [locale])]
            dirs = [os.path.join(basedir, l, 'LC_MESSAGES') for l in locale]
        else:
            dirs = [basedir]
        for ldir in dirs:
@@ -59,7 +59,7 @@ def compile_messages(stdout, locale=None):
class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--locale', '-l', dest='locale', action='append',
                    help='locale(s) to process (e.g. de_AT). Default is to process all. Can be used multiple times, accepts a comma-separated list of locale names.'),
                    help='locale(s) to process (e.g. de_AT). Default is to process all. Can be used multiple times.'),
    )
    help = 'Compiles .po files to .mo files for use with builtin gettext support.'

+2 −2
Original line number Diff line number Diff line
@@ -168,7 +168,7 @@ class Command(NoArgsCommand):
    option_list = NoArgsCommand.option_list + (
        make_option('--locale', '-l', default=None, dest='locale', action='append',
            help='Creates or updates the message files for the given locale(s) (e.g. pt_BR). '
                 'Can be used multiple times, accepts a comma-separated list of locale names.'),
                 'Can be used multiple times.'),
        make_option('--domain', '-d', default='django', dest='domain',
            help='The domain of the message files (default: "django").'),
        make_option('--all', '-a', action='store_true', dest='all',
@@ -264,7 +264,7 @@ class Command(NoArgsCommand):
        # Build po files for each selected locale
        locales = []
        if locale is not None:
            locales += locale.split(',') if not isinstance(locale, list) else locale
            locales = locale
        elif process_all:
            locale_dirs = filter(os.path.isdir, glob.glob('%s/*' % localedir))
            locales = [os.path.basename(l) for l in locale_dirs]
+0 −7
Original line number Diff line number Diff line
@@ -131,8 +131,6 @@ Example usage::
    django-admin.py compilemessages --locale=pt_BR --locale=fr
    django-admin.py compilemessages -l pt_BR
    django-admin.py compilemessages -l pt_BR -l fr
    django-admin.py compilemessages --locale=pt_BR,fr
    django-admin.py compilemessages -l pt_BR,fr

.. versionchanged:: 1.6

@@ -523,11 +521,6 @@ Example usage::
    django-admin.py makemessages -l pt_BR
    django-admin.py makemessages -l pt_BR -l fr

You can also use commas to separate multiple locales::

    django-admin.py makemessages --locale=de,fr,pt_BR
    django-admin.py makemessages -l de,fr,pt_BR

.. versionchanged:: 1.6

    Added the ability to specify multiple locales.
+5 −0
Original line number Diff line number Diff line
@@ -30,3 +30,8 @@ Bug fixes
  key (#21472).
* Fixed a regression where custom querysets for foreign keys were overwritten
  if ``ModelAdmin`` had ordering set (#21405).
* Removed mention of a feature in the ``--locale``/``-l`` option of
  ``makemessages`` and ``compilemessages`` commands that never worked as
  promised: Support of multiple locale names separated by commas. It's still
  possible to specify multiplle locales in one run by suing the option
  multiple times (#21488, #17181).
+5 −5
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ class PoFileTests(MessageCompilationTests):

    def test_bom_rejection(self):
        with self.assertRaises(CommandError) as cm:
            call_command('compilemessages', locale=self.LOCALE, stdout=StringIO())
            call_command('compilemessages', locale=[self.LOCALE], stdout=StringIO())
        self.assertIn("file has a BOM (Byte Order Mark)", cm.exception.args[0])
        self.assertFalse(os.path.exists(self.MO_FILE))

@@ -45,7 +45,7 @@ class PoFileContentsTests(MessageCompilationTests):
        self.addCleanup(os.unlink, os.path.join(test_dir, self.MO_FILE))

    def test_percent_symbol_in_po_file(self):
        call_command('compilemessages', locale=self.LOCALE, stdout=StringIO())
        call_command('compilemessages', locale=[self.LOCALE], stdout=StringIO())
        self.assertTrue(os.path.exists(self.MO_FILE))


@@ -63,7 +63,7 @@ class PercentRenderingTests(MessageCompilationTests):
    @override_settings(LOCALE_PATHS=(os.path.join(test_dir, 'locale'),))
    def test_percent_symbol_escaping(self):
        from django.template import Template, Context
        call_command('compilemessages', locale=self.LOCALE, stdout=StringIO())
        call_command('compilemessages', locale=[self.LOCALE], stdout=StringIO())
        with translation.override(self.LOCALE):
            t = Template('{% load i18n %}{% trans "Looks like a str fmt spec %% o but shouldn\'t be interpreted as such" %}')
            rendered = t.render(Context({}))
@@ -88,7 +88,7 @@ class MultipleLocaleCompilationTests(MessageCompilationTests):
        self.addCleanup(self.rmfile, os.path.join(localedir, self.MO_FILE_FR))

    def test_one_locale(self):
        call_command('compilemessages', locale='hr', stdout=StringIO())
        call_command('compilemessages', locale=['hr'], stdout=StringIO())

        self.assertTrue(os.path.exists(self.MO_FILE_HR))

@@ -110,4 +110,4 @@ class CompilationErrorHandling(MessageCompilationTests):

    def test_error_reported_by_msgfmt(self):
        with self.assertRaises(CommandError):
            call_command('compilemessages', locale=self.LOCALE, stdout=StringIO())
            call_command('compilemessages', locale=[self.LOCALE], stdout=StringIO())
Loading