diff -r bd551af8275b django/core/management/commands/makemessages.py
--- a/django/core/management/commands/makemessages.py	Sat Jan 23 01:32:34 2010 -0300
+++ b/django/core/management/commands/makemessages.py	Sat Jan 23 11:52:22 2010 -0300
@@ -76,29 +76,21 @@
             message = "usage: make-messages.py -l <language>\n   or: make-messages.py -a\n"
         raise CommandError(message)
 
-    # xgettext versions prior to 0.15 assumed Python source files were encoded
-    # in iso-8859-1, and produce utf-8 output.  In the case where xgettext is
-    # given utf-8 input (required for Django files with non-ASCII characters),
-    # this results in a utf-8 re-encoding of the original utf-8 that needs to be
-    # undone to restore the original utf-8.  So we check the xgettext version
-    # here once and set a flag to remember if a utf-8 decoding needs to be done
-    # on xgettext's output for Python files.  We default to assuming this isn't
-    # necessary if we run into any trouble determining the version.
-    xgettext_reencodes_utf8 = False
+    # We require gettext version 0.15 or newer.
     (stdin, stdout, stderr) = os.popen3('xgettext --version', 't')
     match = re.search(r'(?P<major>\d+)\.(?P<minor>\d+)', stdout.read())
     if match:
         xversion = (int(match.group('major')), int(match.group('minor')))
         if xversion < (0, 15):
-            xgettext_reencodes_utf8 = True
- 
+            raise CommandError("Django internationalization requires GNU gettext 0.15 or newer. You are using version %s, please upgrade your gettext toolset." % match.group())
+
     languages = []
     if locale is not None:
         languages.append(locale)
     elif all:
-        locale_dirs = filter(os.path.isdir, glob.glob('%s/*' % localedir)) 
+        locale_dirs = filter(os.path.isdir, glob.glob('%s/*' % localedir))
         languages = [os.path.basename(l) for l in locale_dirs]
-    
+
     for locale in languages:
         if verbosity > 0:
             print "processing language", locale
@@ -162,9 +154,6 @@
                 if errors:
                     raise CommandError("errors happened while running xgettext on %s\n%s" % (file, errors))
 
-                if xgettext_reencodes_utf8:
-                    msgs = msgs.decode('utf-8').encode('iso-8859-1')
-
                 if thefile != file:
                     old = '#: '+os.path.join(dirpath, thefile)[2:]
                     new = '#: '+os.path.join(dirpath, file)[2:]
diff -r bd551af8275b docs/topics/i18n.txt
--- a/docs/topics/i18n.txt	Sat Jan 23 01:32:34 2010 -0300
+++ b/docs/topics/i18n.txt	Sat Jan 23 11:52:22 2010 -0300
@@ -512,6 +512,16 @@
     The old tool ``bin/make-messages.py`` has been moved to the command
     ``django-admin.py makemessages`` to provide consistency throughout Django.
 
+.. admonition:: Gettext utilities
+
+    The ``makemessages`` command (and ``compilemessages`` discussed later) use
+    commands from the GNU gettext toolset: ``xgetetxt``, ``msgfmt``,
+    ``msgmerge`` and ``msguniq``.
+
+    .. versionchanged:: 1.2
+
+    The minimum version of the ``gettext`` utilities supported is 0.15.
+
 To create or update a message file, run this command::
 
     django-admin.py makemessages -l de
