Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

[1.6.x] Decode from UTF-8 explicitly when reading a text file in make…

…messages.

This shows itself with Python 3 under Windows where UTF-8 usually isn't
the default file I/O encoding and caused one failure and three errors
in our test suite under that platform setup.

b5f5264 from master.
  • Loading branch information...
commit b987fb188d3940830e323eed4ea6a121192011cd 1 parent 7130609
Ramiro Morales ramiro authored
9 django/core/management/commands/makemessages.py
View
@@ -1,5 +1,6 @@
import fnmatch
import glob
+import io
import os
import re
import sys
@@ -10,6 +11,7 @@
from django.core.management.base import CommandError, NoArgsCommand
from django.core.management.utils import (handle_extensions, find_command,
popen_wrapper)
+from django.utils.encoding import force_str
from django.utils.functional import total_ordering
from django.utils.text import get_text_list
from django.utils.jslex import prepare_js_for_gettext
@@ -402,16 +404,17 @@ def copy_plural_forms(self, msgs, locale):
for domain in domains:
django_po = os.path.join(django_dir, 'conf', 'locale', locale, 'LC_MESSAGES', '%s.po' % domain)
if os.path.exists(django_po):
- with open(django_po, 'rU') as fp:
+ with io.open(django_po, 'rU', encoding='utf-8') as fp:
m = plural_forms_re.search(fp.read())
if m:
+ plural_form_line = force_str(m.group('value'))
if self.verbosity > 1:
- self.stdout.write("copying plural forms: %s\n" % m.group('value'))
+ self.stdout.write("copying plural forms: %s\n" % plural_form_line)
lines = []
found = False
for line in msgs.split('\n'):
if not found and (not line or plural_forms_re.search(line)):
- line = '%s\n' % m.group('value')
+ line = '%s\n' % plural_form_line
found = True
lines.append(line)
msgs = '\n'.join(lines)
9 tests/i18n/commands/extraction.py
View
@@ -1,6 +1,7 @@
# -*- encoding: utf-8 -*-
from __future__ import unicode_literals
+import io
import os
import re
import shutil
@@ -65,8 +66,8 @@ def test_comments_extractor(self):
os.chdir(self.test_dir)
management.call_command('makemessages', locale=LOCALE, verbosity=0)
self.assertTrue(os.path.exists(self.PO_FILE))
- with open(self.PO_FILE, 'r') as fp:
- po_contents = force_text(fp.read())
+ with io.open(self.PO_FILE, 'r', encoding='utf-8') as fp:
+ po_contents = fp.read()
self.assertTrue('#. Translators: This comment should be extracted' in po_contents)
self.assertTrue('This comment should not be extracted' not in po_contents)
# Comments in templates
@@ -363,8 +364,8 @@ def test_override_plural_forms(self):
os.chdir(self.test_dir)
management.call_command('makemessages', locale='es', extensions=['djtpl'], verbosity=0)
self.assertTrue(os.path.exists(self.PO_FILE_ES))
- with open(self.PO_FILE_ES, 'r') as fp:
- po_contents = force_text(fp.read())
+ with io.open(self.PO_FILE_ES, 'r', encoding='utf-8') as fp:
+ po_contents = fp.read()
found = re.findall(r'^(?P<value>"Plural-Forms.+?\\n")\s*$', po_contents, re.MULTILINE | re.DOTALL)
self.assertEqual(1, len(found))
Please sign in to comment.
Something went wrong with that request. Please try again.