diff --git a/django/core/management/commands/makemessages.py b/django/core/management/commands/makemessages.py
--- a/django/core/management/commands/makemessages.py
+++ b/django/core/management/commands/makemessages.py
@@ -10,6 +10,7 @@
 from django.core.management.base import CommandError, BaseCommand
 
 pythonize_re = re.compile(r'\n\s*//')
+plural_forms_re = re.compile(r'^(?P<value>"Plural-Forms.+?\\n")\s*$', re.MULTILINE | re.DOTALL)
 
 def handle_extensions(extensions=('html',)):
     """
@@ -36,6 +37,34 @@
     # trick xgettext to parse them as Python files)
     return set([x for x in ext_list if x != '.py'])
 
+def copy_django_plural_forms(msgs, loc, domain):
+    """
+    Copies plural forms header contents from a Django catalog of locale loc to
+    the msgs string, inserting it at the right place. msgs should be the
+    contents of a newly created .po file.
+    """
+    django_dir = os.path.normpath(os.path.join(os.path.dirname(__file__), '../../..'))
+    if domain == 'djangojs':
+        domains = ('djangojs', 'django')
+    else:
+        domains = ('django',)
+    for domain in domains:
+        django_po = os.path.join(django_dir, 'conf/locale/%s/LC_MESSAGES/%s.po' % (loc, domain))
+        if os.path.exists(django_po):
+            m = plural_forms_re.search(open(django_po, 'rU').read())
+            if m:
+                #sys.stderr.write("value: %s\n" % m.group('value'))
+                lines = []
+                seen = False
+                for line in msgs.split('\n'):
+                    if not line and not seen:
+                        line = '%s\n' % m.group('value')
+                        seen = True
+                    lines.append(line)
+                msgs = '\n'.join(lines)
+                break
+    return msgs
+
 def make_messages(locale=None, domain='django', verbosity='1', all=False, extensions=None):
     """
     Uses the locale directory from the Django SVN tree or an application/
@@ -50,8 +79,10 @@
 
     from django.utils.translation import templatize
 
+    invoked_for_django = False
     if os.path.isdir(os.path.join('conf', 'locale')):
         localedir = os.path.abspath(os.path.join('conf', 'locale'))
+        invoked_for_django = True
     elif os.path.isdir('locale'):
         localedir = os.path.abspath('locale')
     else:
@@ -173,6 +204,8 @@
                 errors = p.stderr.read()
                 if errors:
                     raise CommandError("errors happened while running msgmerge\n%s" % errors)
+            elif not invoked_for_django:
+                msgs = copy_django_plural_forms(msgs, locale, domain)
             open(pofile, 'wb').write(msgs)
             os.unlink(potfile)
 
