=== modified file 'django/contrib/admin/filterspecs.py'
--- django/contrib/admin/filterspecs.py	2007-11-13 02:21:19 +0000
+++ django/contrib/admin/filterspecs.py	2007-11-13 02:16:19 +0000
@@ -8,6 +8,7 @@
 
 from django.db import models
 from django.utils.encoding import smart_unicode, iri_to_uri
+from django.utils.text import uncapfirst
 from django.utils.translation import ugettext as _
 import datetime
 
@@ -34,7 +35,7 @@
         raise NotImplementedError()
 
     def title(self):
-        return self.field.verbose_name
+        return uncapfirst(self.field.verbose_name)
 
     def output(self, cl):
         t = []
@@ -64,7 +65,7 @@
         return len(self.lookup_choices) > 1
 
     def title(self):
-        return self.lookup_title
+        return uncapfirst(self.lookup_title)
 
     def choices(self, cl):
         yield {'selected': self.lookup_val is None,
@@ -120,7 +121,7 @@
         )
 
     def title(self):
-        return self.field.verbose_name
+        return uncapfirst(self.field.verbose_name)
 
     def choices(self, cl):
         for title, param_dict in self.links:
@@ -139,7 +140,7 @@
         self.lookup_val2 = request.GET.get(self.lookup_kwarg2, None)
 
     def title(self):
-        return self.field.verbose_name
+        return uncapfirst(self.field.verbose_name)
 
     def choices(self, cl):
         for k, v in ((_('All'), None), (_('Yes'), '1'), (_('No'), '0')):
@@ -163,7 +164,7 @@
         self.lookup_choices = model_admin.queryset(request).distinct().order_by(f.name).values(f.name)
 
     def title(self):
-        return self.field.verbose_name
+        return uncapfirst(self.field.verbose_name)
 
     def choices(self, cl):
         yield {'selected': self.lookup_val is None,

=== modified file 'django/contrib/admin/options.py'
--- django/contrib/admin/options.py	2007-11-15 19:56:56 +0000
+++ django/contrib/admin/options.py	2007-11-15 19:57:01 +0000
@@ -9,7 +9,7 @@
 from django.http import Http404, HttpResponse, HttpResponseRedirect
 from django.shortcuts import get_object_or_404, render_to_response
 from django.utils.html import escape
-from django.utils.text import capfirst, get_text_list
+from django.utils.text import capfirst, uncapfirst, get_text_list
 from django.utils.translation import ugettext as _
 from django.utils.encoding import force_unicode
 import sets
@@ -414,9 +414,9 @@
 
         # default message        
         if add:
-            msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': opts.verbose_name, 'obj': new_obj}
+            msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': uncapfirst(opts.verbose_name), 'obj': new_obj}
         else:
-            msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': opts.verbose_name, 'obj': new_obj}
+            msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': uncapfirst(opts.verbose_name), 'obj': new_obj}
 
         # save as new
         if request.POST.has_key('_saveasnew'):
@@ -429,7 +429,7 @@
                 redirect_url = '../../../'
         # save and add another
         elif request.POST.has_key('_addanother'):
-            msg += ' ' + (_('You may add another %s below.') % opts.verbose_name)
+            msg += ' ' + (_('You may add another %s below.') % uncapfirst(opts.verbose_name))
             if add:
                 redirect_url = request.path
             else:
@@ -521,7 +521,7 @@
             inline_admin_formsets.append(inline_admin_formset)
 
         c = template.RequestContext(request, {
-            'title': _('Add %s') % opts.verbose_name,
+            'title': _('Add %s') % uncapfirst(opts.verbose_name),
             'adminform': adminForm,
             'is_popup': request.REQUEST.has_key('_popup'),
             'media': media,
@@ -547,7 +547,7 @@
             raise PermissionDenied
 
         if obj is None:
-            raise Http404('%s object with primary key %r does not exist.' % (opts.verbose_name, escape(object_id)))
+            raise Http404('%s object with primary key %r does not exist.' % (uncapfirst(opts.verbose_name), escape(object_id)))
 
         if request.POST and request.POST.has_key('_saveasnew'):
             return self.add_view(request)
@@ -596,7 +596,7 @@
             inline_admin_formsets.append(inline_admin_formset)
 
         c = template.RequestContext(request, {
-            'title': _('Change %s') % opts.verbose_name,
+            'title': _('Change %s') % uncapfirst(opts.verbose_name),
             'adminform': adminForm,
             'object_id': object_id,
             'original': obj,
@@ -654,7 +654,7 @@
             raise PermissionDenied
 
         if obj is None:
-            raise Http404('%s object with primary key %r does not exist.' % (opts.verbose_name, escape(object_id)))
+            raise Http404('%s object with primary key %r does not exist.' % (uncapfirst(opts.verbose_name), escape(object_id)))
 
         # Populate deleted_objects, a data structure of all related objects that
         # will also be deleted.
@@ -668,11 +668,11 @@
             obj_display = str(obj)
             obj.delete()
             LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(self.model).id, object_id, obj_display, DELETION)
-            request.user.message_set.create(message=_('The %(name)s "%(obj)s" was deleted successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj_display)})
+            request.user.message_set.create(message=_('The %(name)s "%(obj)s" was deleted successfully.') % {'name': force_unicode(uncapfirst(opts.verbose_name)), 'obj': force_unicode(obj_display)})
             return HttpResponseRedirect("../../")
         extra_context = {
             "title": _("Are you sure?"),
-            "object_name": opts.verbose_name,
+            "object_name": uncapfirst(opts.verbose_name),
             "object": obj,
             "deleted_objects": deleted_objects,
             "perms_lacking": perms_needed,

=== modified file 'django/contrib/admin/templates/admin/change_form.html'
--- django/contrib/admin/templates/admin/change_form.html	2007-11-13 02:21:19 +0000
+++ django/contrib/admin/templates/admin/change_form.html	2007-11-13 02:16:19 +0000
@@ -18,7 +18,7 @@
 <div class="breadcrumbs">
      <a href="../../../">{% trans "Home" %}</a> &rsaquo;
      <a href="../">{{ opts.verbose_name_plural|capfirst|escape }}</a> &rsaquo;
-     {% if add %}{% trans "Add" %} {{ opts.verbose_name|escape }}{% else %}{{ original|truncatewords:"18"|escape }}{% endif %}
+     {% if add %}{% trans "Add" %} {{ opts.verbose_name|uncapfirst|escape }}{% else %}{{ original|truncatewords:"18"|escape }}{% endif %}
 </div>
 {% endif %}{% endblock %}
 

=== modified file 'django/contrib/admin/templates/admin/change_list.html'
--- django/contrib/admin/templates/admin/change_list.html	2007-11-13 02:21:19 +0000
+++ django/contrib/admin/templates/admin/change_list.html	2007-11-13 02:16:19 +0000
@@ -15,7 +15,7 @@
 <div id="content-main">
 {% block object-tools %}
 {% if has_add_permission %}
-<ul class="object-tools"><li><a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">{% blocktrans with cl.opts.verbose_name|escape as name %}Add {{ name }}{% endblocktrans %}</a></li></ul>
+<ul class="object-tools"><li><a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">{% blocktrans with cl.opts.verbose_name|uncapfirst|escape as name %}Add {{ name }}{% endblocktrans %}</a></li></ul>
 {% endif %}
 {% endblock %}
 <div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">

=== modified file 'django/contrib/admin/templates/admin/edit_inline/stacked.html'
--- django/contrib/admin/templates/admin/edit_inline/stacked.html	2007-11-13 02:21:19 +0000
+++ django/contrib/admin/templates/admin/edit_inline/stacked.html	2007-11-13 02:16:19 +0000
@@ -5,7 +5,7 @@
 
 {% for inline_admin_form in inline_admin_formset %}
 <div class="inline-related {% if forloop.last %}last-related{% endif %}">
-  <h2><b>{{ inline_admin_formset.opts.verbose_name|title }}:</b>&nbsp;{% if inline_admin_form.original %}{{ inline_admin_form.original }}{% else %} #{{ forloop.counter }}{% endif %}
+  <h2><b>{{ inline_admin_formset.opts.verbose_name|capfirst }}:</b>&nbsp;{% if inline_admin_form.original %}{{ inline_admin_form.original }}{% else %} #{{ forloop.counter }}{% endif %}
     {% if inline_admin_formset.formset.deletable %}<span class="delete">{{ inline_admin_form.deletion_field.field }} {{ inline_admin_form.deletion_field.label_tag }}</span>{% endif %}
     </h2>
   {% if inline_admin_form.show_url %}

=== modified file 'django/contrib/admin/templates/admin/pagination.html'
--- django/contrib/admin/templates/admin/pagination.html	2007-11-13 02:21:19 +0000
+++ django/contrib/admin/templates/admin/pagination.html	2007-11-13 02:16:19 +0000
@@ -7,9 +7,9 @@
 {% endfor %}
 {% endif %}
 {% ifequal cl.result_count 1 %}
-	{% blocktrans with cl.result_count as count and cl.opts.verbose_name|escape as verbose_name %}{{ count }} {{ verbose_name }}{% endblocktrans %}
+	{% blocktrans with cl.result_count as count and cl.opts.verbose_name|uncapfirst|escape as verbose_name %}{{ count }} {{ verbose_name }}{% endblocktrans %}
 {% else %}
-	{% blocktrans with cl.result_count as count and cl.opts.verbose_name_plural|escape as verbose_name_plural %}{{ count }} {{ verbose_name_plural }}{% endblocktrans %}
+	{% blocktrans with cl.result_count as count and cl.opts.verbose_name_plural|uncapfirst|escape as verbose_name_plural %}{{ count }} {{ verbose_name_plural }}{% endblocktrans %}
 {% endifequal %}
 {% if show_all_url %}&nbsp;&nbsp;<a href="{{ show_all_url }}" class="showall">{% trans 'Show all' %}</a>{% endif %}
 </p>

=== modified file 'django/contrib/admin/templatetags/admin_list.py'
--- django/contrib/admin/templatetags/admin_list.py	2007-11-13 02:21:19 +0000
+++ django/contrib/admin/templatetags/admin_list.py	2007-11-13 02:16:19 +0000
@@ -5,7 +5,7 @@
 from django.db import models
 from django.utils import dateformat
 from django.utils.html import escape
-from django.utils.text import capfirst
+from django.utils.text import capfirst, uncapfirst
 from django.utils.translation import get_date_formats, get_partial_date_formats, ugettext as _
 from django.utils.encoding import smart_unicode, smart_str, force_unicode
 from django.template import Library
@@ -79,9 +79,9 @@
             # attribute "short_description". If that doesn't exist, fall back
             # to the method name. And __str__ and __unicode__ are special-cases.
             if field_name == '__unicode__':
-                header = force_unicode(lookup_opts.verbose_name)
+                header = force_unicode(uncapfirst(lookup_opts.verbose_name))
             elif field_name == '__str__':
-                header = smart_str(lookup_opts.verbose_name)
+                header = smart_str(uncapfirst(lookup_opts.verbose_name))
             else:
                 attr = getattr(cl.model, field_name) # Let AttributeErrors propagate.
                 try:
@@ -99,10 +99,11 @@
             # after the else clause.
         else:
             if isinstance(f.rel, models.ManyToOneRel) and f.null:
-                yield {"text": f.verbose_name}
+                yield {"text": uncapfirst(f.verbose_name)}
                 continue
             else:
-                header = f.verbose_name
+                header = uncapfirst(f.verbose_name)
+
 
         th_classes = []
         new_order_type = 'asc'

=== modified file 'django/contrib/admin/util.py'
--- django/contrib/admin/util.py	2007-11-13 02:21:19 +0000
+++ django/contrib/admin/util.py	2007-11-13 02:16:19 +0000
@@ -1,7 +1,7 @@
 from django.core.exceptions import ObjectDoesNotExist
 from django.db import models
 from django.utils.html import escape
-from django.utils.text import capfirst
+from django.utils.text import capfirst, uncapfirst
 from django.utils.encoding import force_unicode
 
 def _nest_help(obj, depth, val):
@@ -83,11 +83,11 @@
                     # Don't display link to edit, because it either has no
                     # admin or is edited inline.
                     nh(deleted_objects, current_depth, [_('One or more %(fieldname)s in %(name)s: %(obj)s') % \
-                        {'fieldname': force_unicode(related.field.verbose_name), 'name': force_unicode(related.opts.verbose_name), 'obj': escape(sub_obj)}, []])
+                        {'fieldname': force_unicode(uncapfirst(related.field.verbose_name)), 'name': force_unicode(uncapfirst(related.opts.verbose_name)), 'obj': escape(sub_obj)}, []])
                 else:
                     # Display a link to the admin page.
                     nh(deleted_objects, current_depth, [
-                        (_('One or more %(fieldname)s in %(name)s:') % {'fieldname': force_unicode(related.field.verbose_name), 'name': force_unicode(related.opts.verbose_name)}) + \
+                        (_('One or more %(fieldname)s in %(name)s:') % {'fieldname': force_unicode(uncapfirst(related.field.verbose_name)), 'name': force_unicode(uncapfirst(related.opts.verbose_name))}) + \
                         (u' <a href="../../../../%s/%s/%s/">%s</a>' % \
                             (related.opts.app_label, related.opts.module_name, sub_obj._get_pk_val(), escape(sub_obj))), []])
         # If there were related objects, and the user doesn't have

=== modified file 'django/contrib/admin/views/main.py'
--- django/contrib/admin/views/main.py	2007-11-13 02:21:19 +0000
+++ django/contrib/admin/views/main.py	2007-11-13 02:16:19 +0000
@@ -9,6 +9,7 @@
 from django.db.models.query import handle_legacy_orderlist, QuerySet
 from django.http import Http404
 from django.utils.encoding import force_unicode, smart_str
+from django.utils.text import uncapfirst
 from django.utils.translation import ugettext
 import operator
 
@@ -146,7 +147,7 @@
         self.query = request.GET.get(SEARCH_VAR, '')
         self.query_set = self.get_query_set()
         self.get_results(request)
-        self.title = (self.is_popup and ugettext('Select %s') % force_unicode(self.opts.verbose_name) or ugettext('Select %s to change') % force_unicode(self.opts.verbose_name))
+        self.title = (self.is_popup and ugettext('Select %s') % force_unicode(uncapfirst(self.opts.verbose_name)) or ugettext('Select %s to change') % force_unicode(uncapfirst(self.opts.verbose_name)))
         self.filter_specs, self.has_filters = self.get_filters(request)
         self.pk_attname = self.lookup_opts.pk.attname
 

