Index: django/templatetags/i18n.py
===================================================================
--- django/templatetags/i18n.py	(revision 6689)
+++ django/templatetags/i18n.py	(working copy)
@@ -70,10 +72,12 @@
         for var, val in self.extra_context.items():
             context[var] = val.render(context)
         singular, vars = self.render_token_list(self.singular)
+        singular = translation.strip_blocktrans(singular)
         if self.plural and self.countervar and self.counter:
             count = self.counter.resolve(context)
             context[self.countervar] = count
             plural, vars = self.render_token_list(self.plural)
+            plural = translation.strip_blocktrans(plural)
             result = translation.ungettext(singular, plural, count)
         else:
             result = translation.ugettext(singular)
Index: django/utils/translation/trans_real.py
===================================================================
--- django/utils/translation/trans_real.py	(revision 6689)
+++ django/utils/translation/trans_real.py	(working copy)
@@ -448,20 +448,26 @@
     inplural = False
     singular = []
     plural = []
+    
+    from django.utils.translation import strip_blocktrans
+           
     for t in Lexer(src, None).tokenize():
         if intrans:
             if t.token_type == TOKEN_BLOCK:
                 endbmatch = endblock_re.match(t.contents)
                 pluralmatch = plural_re.match(t.contents)
                 if endbmatch:
+                    singular = strip_blocktrans(''.join(singular))
+                    
                     if inplural:
-                        out.write(' ngettext(%r,%r,count) ' % (''.join(singular), ''.join(plural)))
+                        plural = strip_blocktrans(''.join(plural))
+                        out.write(' ngettext(%r,%r,count) ' % (singular, plural))
                         for part in singular:
                             out.write(blankout(part, 'S'))
                         for part in plural:
                             out.write(blankout(part, 'P'))
                     else:
-                        out.write(' gettext(%r) ' % ''.join(singular))
+                        out.write(' gettext(%r) ' % singular)
                         for part in singular:
                             out.write(blankout(part, 'S'))
                     intrans = False
Index: django/utils/translation/__init__.py
===================================================================
--- django/utils/translation/__init__.py	(revision 6689)
+++ django/utils/translation/__init__.py	(working copy)
@@ -109,3 +109,26 @@
     """
     return u''.join([force_unicode(s) for s in strings])
 string_concat = lazy(string_concat, unicode)
+
+import os,re
+def strip_blocktrans(text):
+    """Strip indentation from the argument based on the indentation of the first non-empty line.
+    
+    The returned value is stripped of trailing linebreaks and spaces."""
+    
+    lines = text.split(os.linesep)
+    newlines = []
+    
+    firstline = lines[0]
+    if not re.match("\w",firstline) and len(lines) > 1:
+        firstline = lines[1]
+        
+    thematch = re.match('^[\t\s]+',firstline)
+    if thematch:
+        pos = thematch.end()
+    
+        for line in lines:
+            newlines.append(re.sub("^[\t\s]{0,%d}"%pos,"",line))
+        return os.linesep.join(newlines).strip()
+    else:
+        return text.strip()
