Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #16803 -- Use model verbose_name directly as ContentType unicod…

…e representation so it can be translated. Thanks to bronger for the report and Ivan Sagalaev for the patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16839 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit f9dad46d3665214ac80af06371fae10c55605086 1 parent 568681c
@carljm carljm authored
View
15 django/contrib/contenttypes/models.py
@@ -1,6 +1,6 @@
from django.db import models
from django.utils.translation import ugettext_lazy as _
-from django.utils.encoding import smart_unicode
+from django.utils.encoding import smart_unicode, force_unicode
class ContentTypeManager(models.Manager):
@@ -85,7 +85,18 @@ class Meta:
unique_together = (('app_label', 'model'),)
def __unicode__(self):
- return self.name
+ # self.name is deprecated in favor of using model's verbose_name, which
+ # can be translated. Formal deprecation is delayed until we have DB
+ # migration to be able to remove the field from the database along with
+ # the attribute.
+ #
+ # We return self.name only when users have changed its value from the
+ # initial verbose_name_raw and might rely on it.
+ meta = self.model_class()._meta
+ if self.name != meta.verbose_name_raw:
+ return self.name
+ else:
+ return force_unicode(meta.verbose_name)
def model_class(self):
"Returns the Python model class for this type of content."
View
0  tests/regressiontests/i18n/contenttypes/__init__.py
No changes.
View
BIN  tests/regressiontests/i18n/contenttypes/locale/en/LC_MESSAGES/django.mo
Binary file not shown
View
26 tests/regressiontests/i18n/contenttypes/locale/en/LC_MESSAGES/django.po
@@ -0,0 +1,26 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-09-15 15:41-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: models.py:6
+msgid "Anything"
+msgstr ""
+
+#: models.py:15
+msgid "Company"
+msgstr "Company"
View
BIN  tests/regressiontests/i18n/contenttypes/locale/fr/LC_MESSAGES/django.mo
Binary file not shown
View
27 tests/regressiontests/i18n/contenttypes/locale/fr/LC_MESSAGES/django.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-09-15 15:41-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: models.py:6
+msgid "Anything"
+msgstr ""
+
+#: models.py:15
+msgid "Company"
+msgstr "Société"
View
35 tests/regressiontests/i18n/contenttypes/tests.py
@@ -0,0 +1,35 @@
+# coding: utf-8
+from __future__ import with_statement
+
+import os
+
+from django.test import TestCase
+from django.test.utils import override_settings
+from django.utils import translation
+from django.contrib.contenttypes.models import ContentType
+
+
+class ContentTypeTests(TestCase):
+ def test_verbose_name(self):
+ company_type = ContentType.objects.get(app_label='i18n', model='company')
+ with translation.override('en'):
+ self.assertEqual(unicode(company_type), u'Company')
+ with translation.override('fr'):
+ self.assertEqual(unicode(company_type), u'Société')
+
+ def test_field_override(self):
+ company_type = ContentType.objects.get(app_label='i18n', model='company')
+ company_type.name = 'Other'
+ self.assertEqual(unicode(company_type), 'Other')
+
+ContentTypeTests = override_settings(
+ USE_I18N=True,
+ LOCALE_PATHS=(
+ os.path.join(os.path.dirname(__file__), 'locale'),
+ ),
+ LANGUAGE_CODE='en',
+ LANGUAGES=(
+ ('en', 'English'),
+ ('fr', 'French'),
+ ),
+)(ContentTypeTests)
View
3  tests/regressiontests/i18n/models.py
@@ -10,3 +10,6 @@ class Company(models.Model):
date_added = models.DateTimeField(default=datetime(1799,1,31,23,59,59,0))
cents_payed = models.DecimalField(max_digits=4, decimal_places=2)
products_delivered = models.IntegerField()
+
+ class Meta:
+ verbose_name = _('Company')
View
1  tests/regressiontests/i18n/tests.py
@@ -26,6 +26,7 @@
from commands.tests import *
from patterns.tests import *
+from contenttypes.tests import *
from test_warnings import DeprecationWarningTests
here = os.path.dirname(os.path.abspath(__file__))
Please sign in to comment.
Something went wrong with that request. Please try again.