Index: django/core/validators.py
===================================================================
--- django/core/validators.py	(révision 4700)
+++ django/core/validators.py	(copie de travail)
@@ -363,7 +363,7 @@
         self.lower, self.upper = lower, upper
         if not error_message:
             if lower and upper:
-                self.error_message = gettext("This value must be between %s and %s.") % (lower, upper)
+                self.error_message = gettext("This value must be between %(lower)s and %(upper)s.") % {'lower': lower, 'upper': upper}
             elif lower:
                 self.error_message = gettext("This value must be at least %s.") % lower
             elif upper:
Index: django/contrib/humanize/templatetags/humanize.py
===================================================================
--- django/contrib/humanize/templatetags/humanize.py	(révision 4700)
+++ django/contrib/humanize/templatetags/humanize.py	(copie de travail)
@@ -1,3 +1,4 @@
+from django.utils.translation import ngettext
 from django import template
 import re
 
@@ -3,5 +4,5 @@
 register = template.Library()
 
-def ordinal(value):
+def ordinal(value, sup=False):
     """
     Converts an integer to its ordinal as a string. 1 is '1st', 2 is '2nd',
@@ -12,9 +13,11 @@
         value = int(value)
     except ValueError:
         return value
-    t = ('th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th')
+    t = (_('th'), _('st'), _('nd'), _('rd'), _('th'), _('th'), _('th'), _('th'), _('th'), _('th'))
+    if sup:
+	t = ['<sup>'+i+'</sup>' for i in t]
     if value % 100 in (11, 12, 13): # special case
-        return '%dth' % value
+        return _('%(number)d%(string)') % {'number': value, 'string': t[0]}
     return '%d%s' % (value, t[value % 10])
 register.filter(ordinal)
 
@@ -41,11 +44,14 @@
     if value < 1000000:
         return value
     if value < 1000000000:
-        return '%.1f million' % (value / 1000000.0)
+    	new_value = value / 1000000.0
+        return ngettext('%(value).1f million', '%(value).1f million', new_value) % {'value': new_value}
     if value < 1000000000000:
-        return '%.1f billion' % (value / 1000000000.0)
+        new_value = value / 1000000000.0
+        return ngettext('%(value).1f billion', '%(value).1f billion', new_value) % {'value': new_value}
     if value < 1000000000000000:
-        return '%.1f trillion' % (value / 1000000000000.0)
+        new_value = value / 1000000000000.0
+        return ngettext('%(value).1f trillion', '%(value).1f trillion', new_value) % {'value': new_value}
     return value
 register.filter(intword)
 
@@ -60,5 +66,5 @@
         return value
     if not 0 < value < 10:
         return value
-    return ('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine')[value-1]
+    return (_('one'), _('two'), _('three'), _('four'), _('five'), _('six'), _('seven'), _('eight'), _('nine'))[value-1]
 register.filter(apnumber)
Index: django/contrib/admin/views/doc.py
===================================================================
--- django/contrib/admin/views/doc.py	(révision 4700)
+++ django/contrib/admin/views/doc.py	(copie de travail)
@@ -168,7 +168,7 @@
             model = m
             break
     if model is None:
-        raise Http404, _("Model %r not found in app %r") % (model_name, app_label)
+        raise Http404, _("Model %(name)r not found in app %(label)r") % {'name': model_name, 'label': app_label}
 
     opts = model._meta
 
@@ -180,7 +180,7 @@
         if isinstance(field, models.ForeignKey):
             data_type = related_object_name = field.rel.to.__name__
             app_label = field.rel.to._meta.app_label
-            verbose = utils.parse_rst((_("the related `%s.%s` object")  % (app_label, data_type)), 'model', _('model:') + data_type)
+            verbose = utils.parse_rst((_("the related `%(label)s.%(type)s` object")  % {'label': app_label, 'type': data_type}), 'model', _('model:') + data_type)
         else:
             data_type = get_readable_field_data_type(field)
             verbose = field.verbose_name
@@ -211,7 +211,7 @@
 
     # Gather related objects
     for rel in opts.get_all_related_objects():
-        verbose = _("related `%s.%s` objects") % (rel.opts.app_label, rel.opts.object_name)
+        verbose = _("related `%(label)s.%(name)s` objects") % {'label': rel.opts.app_label, 'name': rel.opts.object_name}
         accessor = rel.get_accessor_name()
         fields.append({
             'name'      : "%s.all" % accessor,
Index: django/bin/make-messages.py
===================================================================
--- django/bin/make-messages.py	(révision 4700)
+++ django/bin/make-messages.py	(copie de travail)
@@ -81,7 +81,7 @@
                     src = pythonize_re.sub('\n#', src)
                     open(os.path.join(dirpath, '%s.py' % file), "wb").write(src)
                     thefile = '%s.py' % file
-                    cmd = 'xgettext %s -d %s -L Perl --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy -o - "%s"' % (
+                    cmd = 'xgettext %s -d %s -L Perl --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy --from-code UTF-8 -o - "%s"' % (
                         os.path.exists(potfile) and '--omit-header' or '', domain, os.path.join(dirpath, thefile))
                     (stdin, stdout, stderr) = os.popen3(cmd, 'b')
                     msgs = stdout.read()
@@ -103,7 +103,7 @@
                         open(os.path.join(dirpath, '%s.py' % file), "wb").write(templatize(src))
                         thefile = '%s.py' % file
                     if verbose: sys.stdout.write('processing file %s in %s\n' % (file, dirpath))
-                    cmd = 'xgettext %s -d %s -L Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy -o - "%s"' % (
+                    cmd = 'xgettext %s -d %s -L Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy --from-code UTF-8 -o - "%s"' % (
                         os.path.exists(potfile) and '--omit-header' or '', domain, os.path.join(dirpath, thefile))
                     (stdin, stdout, stderr) = os.popen3(cmd, 'b')
                     msgs = stdout.read()
