Fixed #16803 -- Use model verbose_name directly as ContentType unicode 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
This commit is contained in:
parent
568681c6da
commit
f9dad46d36
|
@ -1,6 +1,6 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import ugettext_lazy as _
|
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):
|
class ContentTypeManager(models.Manager):
|
||||||
|
|
||||||
|
@ -85,7 +85,18 @@ class ContentType(models.Model):
|
||||||
unique_together = (('app_label', 'model'),)
|
unique_together = (('app_label', 'model'),)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
|
# 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
|
return self.name
|
||||||
|
else:
|
||||||
|
return force_unicode(meta.verbose_name)
|
||||||
|
|
||||||
def model_class(self):
|
def model_class(self):
|
||||||
"Returns the Python model class for this type of content."
|
"Returns the Python model class for this type of content."
|
||||||
|
|
Binary file not shown.
|
@ -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"
|
Binary file not shown.
|
@ -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é"
|
|
@ -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)
|
|
@ -10,3 +10,6 @@ class Company(models.Model):
|
||||||
date_added = models.DateTimeField(default=datetime(1799,1,31,23,59,59,0))
|
date_added = models.DateTimeField(default=datetime(1799,1,31,23,59,59,0))
|
||||||
cents_payed = models.DecimalField(max_digits=4, decimal_places=2)
|
cents_payed = models.DecimalField(max_digits=4, decimal_places=2)
|
||||||
products_delivered = models.IntegerField()
|
products_delivered = models.IntegerField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = _('Company')
|
|
@ -26,6 +26,7 @@ from models import Company, TestModel
|
||||||
|
|
||||||
from commands.tests import *
|
from commands.tests import *
|
||||||
from patterns.tests import *
|
from patterns.tests import *
|
||||||
|
from contenttypes.tests import *
|
||||||
from test_warnings import DeprecationWarningTests
|
from test_warnings import DeprecationWarningTests
|
||||||
|
|
||||||
here = os.path.dirname(os.path.abspath(__file__))
|
here = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
Loading…
Reference in New Issue