Skip to content

Commit

Permalink
Added --previous flag to msgmerge command used by makemessages
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
claudep committed Mar 6, 2014
1 parent 2094861 commit 06efeae
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 34 deletions.
57 changes: 23 additions & 34 deletions django/core/management/commands/makemessages.py
Expand Up @@ -80,14 +80,8 @@ def process(self, command, domain):
'--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
Expand Down Expand Up @@ -115,14 +109,8 @@ def process(self, command, domain):
'--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
Expand Down Expand Up @@ -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')
Expand All @@ -217,8 +210,19 @@ def handle_noargs(self, *args, **options):
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')

Expand Down Expand Up @@ -307,12 +311,7 @@ def build_potfiles(self):
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:
Expand Down Expand Up @@ -389,12 +388,7 @@ def write_po_file(self, potfile, locale):
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:
Expand All @@ -413,12 +407,7 @@ def write_po_file(self, potfile, locale):
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:
Expand Down
5 changes: 5 additions & 0 deletions docs/ref/django-admin.txt
Expand Up @@ -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.
Expand Down
4 changes: 4 additions & 0 deletions docs/releases/1.7.txt
Expand Up @@ -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`.
Expand Down

0 comments on commit 06efeae

Please sign in to comment.