Commit 06efeae5 authored by Claude Paroz's avatar Claude Paroz
Browse files

Added --previous flag to msgmerge command used by makemessages

Also took the opportunity to slightly refactor gettext options
so as to ease customization by subclassing the command.
Thanks Michal Čihař for the report and initial patch.
parent 20948612
Loading
Loading
Loading
Loading
+23 −34
Original line number Diff line number Diff line
@@ -80,14 +80,8 @@ class TranslatableFile(object):
                '--keyword=ngettext_lazy:1,2',
                '--keyword=pgettext:1c,2',
                '--keyword=npgettext:1c,2,3',
                '--from-code=UTF-8',
                '--add-comments=Translators',
                '--output=-'
            ]
            if command.wrap:
                args.append(command.wrap)
            if command.location:
                args.append(command.location)
            ] + command.xgettext_options
            args.append(work_file)
        elif domain == 'django' and (file_ext == '.py' or file_ext in command.extensions):
            thefile = self.file
@@ -115,14 +109,8 @@ class TranslatableFile(object):
                '--keyword=npgettext:1c,2,3',
                '--keyword=pgettext_lazy:1c,2',
                '--keyword=npgettext_lazy:1c,2,3',
                '--from-code=UTF-8',
                '--add-comments=Translators',
                '--output=-'
            ]
            if command.wrap:
                args.append(command.wrap)
            if command.location:
                args.append(command.location)
            ] + command.xgettext_options
            args.append(work_file)
        else:
            return
@@ -206,6 +194,11 @@ class Command(NoArgsCommand):
    requires_system_checks = False
    leave_locale_alone = True

    msgmerge_options = ['-q', '--previous']
    msguniq_options = ['--to-code=utf-8']
    msgattrib_options = ['--no-obsolete']
    xgettext_options = ['--from-code=UTF-8', '--add-comments=Translators']

    def handle_noargs(self, *args, **options):
        locale = options.get('locale')
        self.domain = options.get('domain')
@@ -217,8 +210,19 @@ class Command(NoArgsCommand):
        if options.get('use_default_ignore_patterns'):
            ignore_patterns += ['CVS', '.*', '*~', '*.pyc']
        self.ignore_patterns = list(set(ignore_patterns))
        self.wrap = '--no-wrap' if options.get('no_wrap') else ''
        self.location = '--no-location' if options.get('no_location') else ''

        # Avoid messing with mutable class variables
        if options.get('no_wrap'):
            self.msgmerge_options = self.msgmerge_options[:] + ['--no-wrap']
            self.msguniq_options = self.msguniq_options[:] + ['--no-wrap']
            self.msgattrib_options = self.msgattrib_options[:] + ['--no-wrap']
            self.xgettext_options = self.xgettext_options[:] + ['--no-wrap']
        if options.get('no_location'):
            self.msgmerge_options = self.msgmerge_options[:] + ['--no-location']
            self.msguniq_options = self.msguniq_options[:] + ['--no-location']
            self.msgattrib_options = self.msgattrib_options[:] + ['--no-location']
            self.xgettext_options = self.xgettext_options[:] + ['--no-location']

        self.no_obsolete = options.get('no_obsolete')
        self.keep_pot = options.get('keep_pot')

@@ -307,12 +311,7 @@ class Command(NoArgsCommand):
            potfile = os.path.join(path, '%s.pot' % str(self.domain))
            if not os.path.exists(potfile):
                continue
            args = ['msguniq', '--to-code=utf-8']
            if self.wrap:
                args.append(self.wrap)
            if self.location:
                args.append(self.location)
            args.append(potfile)
            args = ['msguniq'] + self.msguniq_options + [potfile]
            msgs, errors, status = popen_wrapper(args)
            if errors:
                if status != STATUS_OK:
@@ -389,12 +388,7 @@ class Command(NoArgsCommand):
        pofile = os.path.join(basedir, '%s.po' % str(self.domain))

        if os.path.exists(pofile):
            args = ['msgmerge', '-q']
            if self.wrap:
                args.append(self.wrap)
            if self.location:
                args.append(self.location)
            args.extend([pofile, potfile])
            args = ['msgmerge'] + self.msgmerge_options + [pofile, potfile]
            msgs, errors, status = popen_wrapper(args)
            if errors:
                if status != STATUS_OK:
@@ -413,12 +407,7 @@ class Command(NoArgsCommand):
            fp.write(msgs)

        if self.no_obsolete:
            args = ['msgattrib', '-o', pofile, '--no-obsolete']
            if self.wrap:
                args.append(self.wrap)
            if self.location:
                args.append(self.location)
            args.append(pofile)
            args = ['msgattrib'] + self.msgattrib_options + ['-o', pofile, pofile]
            msgs, errors, status = popen_wrapper(args)
            if errors:
                if status != STATUS_OK:
+5 −0
Original line number Diff line number Diff line
@@ -569,6 +569,11 @@ Example usage::

    Added the ability to specify multiple locales.

.. versionchanged:: 1.7

    Added the ``--previous`` option to the ``msgmerge`` command when merging
    with existing po files.

.. django-admin-option:: --domain

Use the ``--domain`` or ``-d`` option to change the domain of the messages files.
+4 −0
Original line number Diff line number Diff line
@@ -572,6 +572,10 @@ Internationalization
  app or project message file. See :ref:`how-to-create-language-files` for
  details.

* The :djadmin:`makemessages` command now always adds the ``--previous``
  command line flag to the ``msgmerge`` command, keeping previously translated
  strings in po files for fuzzy strings.

* The following settings to adjust the language cookie options were introduced:
  :setting:`LANGUAGE_COOKIE_AGE`, :setting:`LANGUAGE_COOKIE_DOMAIN`
  and :setting:`LANGUAGE_COOKIE_PATH`.