Index: django/core/meta/__init__.py
===================================================================
--- django/core/meta/__init__.py	(revision 754)
+++ django/core/meta/__init__.py	(working copy)
@@ -1010,7 +1010,8 @@
 def method_get_file_url(field, self):
     if getattr(self, field.name): # value is not blank
         import urlparse
-        return urlparse.urljoin(settings.MEDIA_URL, getattr(self, field.name)).replace('\\', '/')
+        fname = getattr(self, field.name)[len(settings.MEDIA_ROOT):] # name is stored with filesystem full path
+        return urlparse.urljoin(settings.MEDIA_URL, fname).replace('\\', '/')
     return ''
 
 def method_get_file_size(field, self):
Index: django/core/defaulttags.py
===================================================================
--- django/core/defaulttags.py	(revision 754)
+++ django/core/defaulttags.py	(working copy)
@@ -291,22 +291,32 @@
     def __init__(self, cmd):
         self.cmd = cmd
         self.i18n_re = re.compile(r'^\s*_\((.*)\)\s*$')
+        self.ngettext_re = re.compile(r'''^\s*ngettext\((.+),\s*((?:"|').+(?:"|')),\s*((?:"|').+(?:"|'))\)\s*$''')
 
+    def _resolve_var(self, s, context):
+        if s.startswith("'") and s.endswith("'"):
+            s = s[1:-1]
+        elif s.startswith('"""') and s.endswith('"""'):
+            s = s[3:-3]
+        elif s.startswith('"') and s.endswith('"'):
+            s = s[1:-1]
+        else:
+            s = template.resolve_variable_with_filters(s, context)
+        return s
+
     def render(self, context):
         m = self.i18n_re.match(self.cmd)
+        ng = self.i18n_re.match(self.cmd)
         if m:
-            s = m.group(1)
-            if s.startswith("'") and s.endswith("'"):
-                s = s[1:-1]
-            elif s.startswith('"""') and s.endswith('"""'):
-                s = s[3:-3]
-            elif s.startswith('"') and s.endswith('"'):
-                s = s[1:-1]
-            else:
-                s = template.resolve_variable_with_filters(s, context)
+            s = self._resolve_var(m.group(1), context)
             return translation.gettext(s) % context
+        elif ng: # ngettext
+            var = template.resolve_variable_with_filters(ng.group(1), context)
+            singular = self._resolve_var(m.group(2), context)
+            plural = self._resolve_var(m.group(3), context)
+            return translation.ngettext(var, singular, plural) % context
         else:
-            raise template.TemplateSyntaxError("i18n must be called as {% i18n _('some message') %}")
+            raise template.TemplateSyntaxError("i18n must be called as {% i18n _('some message') %} or {% i18n ngettext(var, 'singular', 'plural') %}")
 
 def do_comment(parser, token):
     """
