Fixed #21209 -- .po file path comments on Windows.
Literals from source files with Django template language syntax don't have a '.py' suffix anymore. Also, the '.\' prefix is preserved to respect GNU gettext behavior on that platform. Refs #16903.
This commit is contained in:
parent
1d0fc61b1c
commit
4b715fc05a
|
@ -135,6 +135,12 @@ class TranslatableFile(object):
|
||||||
command.stdout.write(errors)
|
command.stdout.write(errors)
|
||||||
if msgs:
|
if msgs:
|
||||||
if is_templatized:
|
if is_templatized:
|
||||||
|
# Remove '.py' suffix
|
||||||
|
if os.name =='nt':
|
||||||
|
# Preserve '.\' prefix on Windows to respect gettext behavior
|
||||||
|
old = '#: ' + work_file
|
||||||
|
new = '#: ' + orig_file
|
||||||
|
else:
|
||||||
old = '#: ' + work_file[2:]
|
old = '#: ' + work_file[2:]
|
||||||
new = '#: ' + orig_file[2:]
|
new = '#: ' + orig_file[2:]
|
||||||
msgs = msgs.replace(old, new)
|
msgs = msgs.replace(old, new)
|
||||||
|
|
|
@ -377,23 +377,39 @@ class NoWrapExtractorTests(ExtractorTests):
|
||||||
self.assertMsgId('""\n"This literal should also be included wrapped or not wrapped depending on the "\n"use of the --no-wrap option."', po_contents, use_quotes=False)
|
self.assertMsgId('""\n"This literal should also be included wrapped or not wrapped depending on the "\n"use of the --no-wrap option."', po_contents, use_quotes=False)
|
||||||
|
|
||||||
|
|
||||||
class NoLocationExtractorTests(ExtractorTests):
|
class LocationCommentsTests(ExtractorTests):
|
||||||
|
|
||||||
def test_no_location_enabled(self):
|
def test_no_location_enabled(self):
|
||||||
|
"""Behavior is correct if --no-location switch is specified. See #16903."""
|
||||||
os.chdir(self.test_dir)
|
os.chdir(self.test_dir)
|
||||||
management.call_command('makemessages', locale=LOCALE, verbosity=0, no_location=True)
|
management.call_command('makemessages', locale=LOCALE, verbosity=0, no_location=True)
|
||||||
self.assertTrue(os.path.exists(self.PO_FILE))
|
self.assertTrue(os.path.exists(self.PO_FILE))
|
||||||
with open(self.PO_FILE, 'r') as fp:
|
with open(self.PO_FILE, 'r') as fp:
|
||||||
po_contents = force_text(fp.read())
|
po_contents = force_text(fp.read())
|
||||||
self.assertFalse('#: templates/test.html:55' in po_contents)
|
needle = os.sep.join(['#: templates', 'test.html:55'])
|
||||||
|
self.assertFalse(needle in po_contents, '"%s" shouldn\'t be in final .po file.' % needle)
|
||||||
|
|
||||||
def test_no_location_disabled(self):
|
def test_no_location_disabled(self):
|
||||||
|
"""Behavior is correct if --no-location switch isn't specified."""
|
||||||
os.chdir(self.test_dir)
|
os.chdir(self.test_dir)
|
||||||
management.call_command('makemessages', locale=LOCALE, verbosity=0, no_location=False)
|
management.call_command('makemessages', locale=LOCALE, verbosity=0, no_location=False)
|
||||||
self.assertTrue(os.path.exists(self.PO_FILE))
|
self.assertTrue(os.path.exists(self.PO_FILE))
|
||||||
with open(self.PO_FILE, 'r') as fp:
|
with open(self.PO_FILE, 'r') as fp:
|
||||||
|
# Standard comment with source file relative path should be present -- #16903
|
||||||
po_contents = force_text(fp.read())
|
po_contents = force_text(fp.read())
|
||||||
self.assertTrue('#: templates/test.html:55' in po_contents)
|
if os.name == 'nt':
|
||||||
|
# #: .\path\to\file.html:123
|
||||||
|
cwd_prefix = '%s%s' % (os.curdir, os.sep)
|
||||||
|
else:
|
||||||
|
# #: path/to/file.html:123
|
||||||
|
cwd_prefix = ''
|
||||||
|
needle = os.sep.join(['#: %stemplates' % cwd_prefix, 'test.html:55'])
|
||||||
|
self.assertTrue(needle in po_contents, '"%s" not found in final .po file.' % needle)
|
||||||
|
|
||||||
|
# #21208 -- Leaky paths in comments on Windows e.g. #: path\to\file.html.py:123
|
||||||
|
bad_suffix = '.py'
|
||||||
|
bad_string = 'templates%stest.html%s' % (os.sep, bad_suffix) #
|
||||||
|
self.assertFalse(bad_string in po_contents, '"%s" shouldn\'t be in final .po file.' % bad_string)
|
||||||
|
|
||||||
|
|
||||||
class KeepPotFileExtractorTests(ExtractorTests):
|
class KeepPotFileExtractorTests(ExtractorTests):
|
||||||
|
|
Loading…
Reference in New Issue