summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRamiro Morales <ramiro@rmorales.net>2013-10-21 00:22:32 -0300
committerRamiro Morales <ramiro@rmorales.net>2013-10-22 07:38:02 -0300
commitb987fb188d3940830e323eed4ea6a121192011cd (patch)
treea84541928f947f4caf7bc88b0db4ba95bf20793a
parent71306096542f5c1587cd6dd0de99e550608400cb (diff)
downloaddjango-b987fb188d3940830e323eed4ea6a121192011cd.tar.gz
[1.6.x] Decode from UTF-8 explicitly when reading a text file in makemessages.
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. b5f52647fe from master.
-rw-r--r--django/core/management/commands/makemessages.py9
-rw-r--r--tests/i18n/commands/extraction.py9
2 files changed, 11 insertions, 7 deletions
diff --git a/django/core/management/commands/makemessages.py b/django/core/management/commands/makemessages.py
index 7ad1a8f3aa..54352fd0ee 100644
--- a/django/core/management/commands/makemessages.py
+++ b/django/core/management/commands/makemessages.py
@@ -1,5 +1,6 @@
import fnmatch
import glob
+import io
import os
import re
import sys
@@ -10,6 +11,7 @@ import django
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 @@ class Command(NoArgsCommand):
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)
diff --git a/tests/i18n/commands/extraction.py b/tests/i18n/commands/extraction.py
index 79099a7fb0..18a9040126 100644
--- a/tests/i18n/commands/extraction.py
+++ b/tests/i18n/commands/extraction.py
@@ -1,6 +1,7 @@
# -*- encoding: utf-8 -*-
from __future__ import unicode_literals
+import io
import os
import re
import shutil
@@ -65,8 +66,8 @@ class BasicExtractorTests(ExtractorTests):
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 @@ class CopyPluralFormsExtractorTests(ExtractorTests):
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))