瀏覽代碼

Converted usage of ugettext* functions to their gettext* aliases

Thanks Tim Graham for the review.
Claude Paroz 8 年之前
父節點
當前提交
c651331b34
共有 100 個文件被更改,包括 258 次插入262 次删除
  1. 2 2
      django/contrib/admin/actions.py
  2. 1 1
      django/contrib/admin/apps.py
  3. 1 1
      django/contrib/admin/filters.py
  4. 1 1
      django/contrib/admin/forms.py
  5. 3 3
      django/contrib/admin/helpers.py
  6. 15 15
      django/contrib/admin/models.py
  7. 3 3
      django/contrib/admin/options.py
  8. 4 4
      django/contrib/admin/sites.py
  9. 1 1
      django/contrib/admin/templatetags/admin_list.py
  10. 1 1
      django/contrib/admin/tests.py
  11. 2 4
      django/contrib/admin/utils.py
  12. 3 3
      django/contrib/admin/views/main.py
  13. 1 1
      django/contrib/admin/widgets.py
  14. 1 1
      django/contrib/admindocs/apps.py
  15. 1 1
      django/contrib/admindocs/views.py
  16. 2 2
      django/contrib/auth/admin.py
  17. 1 1
      django/contrib/auth/apps.py
  18. 1 1
      django/contrib/auth/base_user.py
  19. 4 4
      django/contrib/auth/forms.py
  20. 1 1
      django/contrib/auth/hashers.py
  21. 1 1
      django/contrib/auth/models.py
  22. 3 3
      django/contrib/auth/password_validation.py
  23. 1 1
      django/contrib/auth/validators.py
  24. 1 1
      django/contrib/auth/views.py
  25. 1 1
      django/contrib/contenttypes/apps.py
  26. 1 1
      django/contrib/contenttypes/models.py
  27. 1 1
      django/contrib/contenttypes/views.py
  28. 1 1
      django/contrib/flatpages/admin.py
  29. 1 1
      django/contrib/flatpages/apps.py
  30. 3 3
      django/contrib/flatpages/forms.py
  31. 1 1
      django/contrib/flatpages/models.py
  32. 1 1
      django/contrib/gis/apps.py
  33. 1 1
      django/contrib/gis/db/models/fields.py
  34. 1 1
      django/contrib/gis/forms/fields.py
  35. 1 1
      django/contrib/gis/views.py
  36. 1 1
      django/contrib/humanize/apps.py
  37. 29 29
      django/contrib/humanize/templatetags/humanize.py
  38. 1 1
      django/contrib/messages/apps.py
  39. 1 1
      django/contrib/postgres/apps.py
  40. 1 1
      django/contrib/postgres/fields/array.py
  41. 1 1
      django/contrib/postgres/fields/hstore.py
  42. 1 1
      django/contrib/postgres/fields/jsonb.py
  43. 1 1
      django/contrib/postgres/forms/array.py
  44. 1 1
      django/contrib/postgres/forms/hstore.py
  45. 1 1
      django/contrib/postgres/forms/jsonb.py
  46. 1 1
      django/contrib/postgres/forms/ranges.py
  47. 1 1
      django/contrib/postgres/utils.py
  48. 3 3
      django/contrib/postgres/validators.py
  49. 1 1
      django/contrib/redirects/apps.py
  50. 1 1
      django/contrib/redirects/models.py
  51. 1 1
      django/contrib/sessions/apps.py
  52. 1 1
      django/contrib/sessions/base_session.py
  53. 1 1
      django/contrib/sitemaps/apps.py
  54. 1 1
      django/contrib/sites/apps.py
  55. 1 1
      django/contrib/sites/models.py
  56. 1 1
      django/contrib/staticfiles/apps.py
  57. 1 1
      django/contrib/syndication/apps.py
  58. 1 1
      django/core/paginator.py
  59. 6 6
      django/core/validators.py
  60. 1 1
      django/db/models/base.py
  61. 1 1
      django/db/models/fields/__init__.py
  62. 1 1
      django/db/models/fields/files.py
  63. 1 1
      django/db/models/fields/related.py
  64. 1 1
      django/forms/boundfield.py
  65. 2 2
      django/forms/fields.py
  66. 1 1
      django/forms/forms.py
  67. 3 3
      django/forms/formsets.py
  68. 5 5
      django/forms/models.py
  69. 1 1
      django/forms/utils.py
  70. 7 7
      django/forms/widgets.py
  71. 2 2
      django/template/base.py
  72. 9 9
      django/template/defaultfilters.py
  73. 4 4
      django/templatetags/i18n.py
  74. 1 1
      django/urls/resolvers.py
  75. 1 1
      django/utils/dateformat.py
  76. 1 1
      django/utils/dates.py
  77. 1 1
      django/utils/ipv6.py
  78. 2 2
      django/utils/text.py
  79. 9 9
      django/utils/timesince.py
  80. 1 1
      django/utils/translation/__init__.py
  81. 1 1
      django/views/csrf.py
  82. 1 1
      django/views/debug.py
  83. 1 1
      django/views/generic/dates.py
  84. 1 1
      django/views/generic/detail.py
  85. 1 1
      django/views/generic/list.py
  86. 2 2
      django/views/static.py
  87. 1 1
      docs/howto/custom-model-fields.txt
  88. 3 3
      docs/ref/applications.txt
  89. 1 1
      docs/ref/contrib/admin/index.txt
  90. 1 1
      docs/ref/contrib/flatpages.txt
  91. 1 1
      docs/ref/models/instances.txt
  92. 2 2
      docs/ref/settings.txt
  93. 1 1
      docs/ref/urls.txt
  94. 1 1
      docs/ref/validators.txt
  95. 1 1
      docs/topics/auth/passwords.txt
  96. 1 1
      docs/topics/forms/modelforms.txt
  97. 53 55
      docs/topics/i18n/translation.txt
  98. 1 1
      tests/admin_utils/models.py
  99. 1 1
      tests/auth_tests/test_forms.py
  100. 1 1
      tests/auth_tests/test_management.py

+ 2 - 2
django/contrib/admin/actions.py

@@ -9,7 +9,7 @@ from django.core.exceptions import PermissionDenied
 from django.db import router
 from django.template.response import TemplateResponse
 from django.utils.encoding import force_text
-from django.utils.translation import ugettext as _, ugettext_lazy
+from django.utils.translation import gettext as _, gettext_lazy
 
 
 def delete_selected(modeladmin, request, queryset):
@@ -84,4 +84,4 @@ def delete_selected(modeladmin, request, queryset):
     ], context)
 
 
-delete_selected.short_description = ugettext_lazy("Delete selected %(verbose_name_plural)s")
+delete_selected.short_description = gettext_lazy("Delete selected %(verbose_name_plural)s")

+ 1 - 1
django/contrib/admin/apps.py

@@ -1,7 +1,7 @@
 from django.apps import AppConfig
 from django.contrib.admin.checks import check_admin_app, check_dependencies
 from django.core import checks
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class SimpleAdminConfig(AppConfig):

+ 1 - 1
django/contrib/admin/filters.py

@@ -15,7 +15,7 @@ from django.core.exceptions import ImproperlyConfigured, ValidationError
 from django.db import models
 from django.utils import timezone
 from django.utils.encoding import force_text
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class ListFilter:

+ 1 - 1
django/contrib/admin/forms.py

@@ -1,6 +1,6 @@
 from django import forms
 from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class AdminAuthenticationForm(AuthenticationForm):

+ 3 - 3
django/contrib/admin/helpers.py

@@ -13,7 +13,7 @@ from django.template.defaultfilters import capfirst, linebreaksbr
 from django.utils.encoding import force_text
 from django.utils.html import conditional_escape, format_html
 from django.utils.safestring import mark_safe
-from django.utils.translation import ugettext, ugettext_lazy as _
+from django.utils.translation import gettext, gettext_lazy as _
 
 ACTION_CHECKBOX_NAME = '_selected_action'
 
@@ -290,10 +290,10 @@ class InlineAdminFormSet:
             'name': '#%s' % self.formset.prefix,
             'options': {
                 'prefix': self.formset.prefix,
-                'addText': ugettext('Add another %(verbose_name)s') % {
+                'addText': gettext('Add another %(verbose_name)s') % {
                     'verbose_name': capfirst(verbose_name),
                 },
-                'deleteText': ugettext('Remove'),
+                'deleteText': gettext('Remove'),
             }
         })
 

+ 15 - 15
django/contrib/admin/models.py

@@ -8,7 +8,7 @@ from django.urls import NoReverseMatch, reverse
 from django.utils import timezone
 from django.utils.encoding import force_text
 from django.utils.text import get_text_list
-from django.utils.translation import ugettext, ugettext_lazy as _
+from django.utils.translation import gettext, gettext_lazy as _
 
 ADDITION = 1
 CHANGE = 2
@@ -68,16 +68,16 @@ class LogEntry(models.Model):
 
     def __str__(self):
         if self.is_addition():
-            return ugettext('Added "%(object)s".') % {'object': self.object_repr}
+            return gettext('Added "%(object)s".') % {'object': self.object_repr}
         elif self.is_change():
-            return ugettext('Changed "%(object)s" - %(changes)s') % {
+            return gettext('Changed "%(object)s" - %(changes)s') % {
                 'object': self.object_repr,
                 'changes': self.get_change_message(),
             }
         elif self.is_deletion():
-            return ugettext('Deleted "%(object)s."') % {'object': self.object_repr}
+            return gettext('Deleted "%(object)s."') % {'object': self.object_repr}
 
-        return ugettext('LogEntry Object')
+        return gettext('LogEntry Object')
 
     def is_addition(self):
         return self.action_flag == ADDITION
@@ -102,29 +102,29 @@ class LogEntry(models.Model):
             for sub_message in change_message:
                 if 'added' in sub_message:
                     if sub_message['added']:
-                        sub_message['added']['name'] = ugettext(sub_message['added']['name'])
-                        messages.append(ugettext('Added {name} "{object}".').format(**sub_message['added']))
+                        sub_message['added']['name'] = gettext(sub_message['added']['name'])
+                        messages.append(gettext('Added {name} "{object}".').format(**sub_message['added']))
                     else:
-                        messages.append(ugettext('Added.'))
+                        messages.append(gettext('Added.'))
 
                 elif 'changed' in sub_message:
                     sub_message['changed']['fields'] = get_text_list(
-                        sub_message['changed']['fields'], ugettext('and')
+                        sub_message['changed']['fields'], gettext('and')
                     )
                     if 'name' in sub_message['changed']:
-                        sub_message['changed']['name'] = ugettext(sub_message['changed']['name'])
-                        messages.append(ugettext('Changed {fields} for {name} "{object}".').format(
+                        sub_message['changed']['name'] = gettext(sub_message['changed']['name'])
+                        messages.append(gettext('Changed {fields} for {name} "{object}".').format(
                             **sub_message['changed']
                         ))
                     else:
-                        messages.append(ugettext('Changed {fields}.').format(**sub_message['changed']))
+                        messages.append(gettext('Changed {fields}.').format(**sub_message['changed']))
 
                 elif 'deleted' in sub_message:
-                    sub_message['deleted']['name'] = ugettext(sub_message['deleted']['name'])
-                    messages.append(ugettext('Deleted {name} "{object}".').format(**sub_message['deleted']))
+                    sub_message['deleted']['name'] = gettext(sub_message['deleted']['name'])
+                    messages.append(gettext('Deleted {name} "{object}".').format(**sub_message['deleted']))
 
             change_message = ' '.join(msg[0].upper() + msg[1:] for msg in messages)
-            return change_message or ugettext('No fields changed.')
+            return change_message or gettext('No fields changed.')
         else:
             return self.change_message
 

+ 3 - 3
django/contrib/admin/options.py

@@ -43,7 +43,7 @@ from django.utils.html import format_html
 from django.utils.http import urlencode
 from django.utils.safestring import mark_safe
 from django.utils.text import capfirst, format_lazy, get_text_list
-from django.utils.translation import ugettext as _, ungettext
+from django.utils.translation import gettext as _, ngettext
 from django.views.decorators.csrf import csrf_protect
 from django.views.generic import RedirectView
 
@@ -1609,7 +1609,7 @@ class ModelAdmin(BaseModelAdmin):
                         changecount += 1
 
                 if changecount:
-                    msg = ungettext(
+                    msg = ngettext(
                         "%(count)s %(name)s was changed successfully.",
                         "%(count)s %(name)s were changed successfully.",
                         changecount
@@ -1641,7 +1641,7 @@ class ModelAdmin(BaseModelAdmin):
         else:
             action_form = None
 
-        selection_note_all = ungettext(
+        selection_note_all = ngettext(
             '%(total_count)s selected',
             'All %(total_count)s selected',
             cl.result_count

+ 4 - 4
django/contrib/admin/sites.py

@@ -10,7 +10,7 @@ from django.http import Http404, HttpResponseRedirect
 from django.template.response import TemplateResponse
 from django.urls import NoReverseMatch, reverse
 from django.utils.text import capfirst
-from django.utils.translation import ugettext as _, ugettext_lazy
+from django.utils.translation import gettext as _, gettext_lazy
 from django.views.decorators.cache import never_cache
 from django.views.decorators.csrf import csrf_protect
 from django.views.i18n import JavaScriptCatalog
@@ -36,13 +36,13 @@ class AdminSite:
     """
 
     # Text to put at the end of each page's <title>.
-    site_title = ugettext_lazy('Django site admin')
+    site_title = gettext_lazy('Django site admin')
 
     # Text to put in each page's <h1>.
-    site_header = ugettext_lazy('Django administration')
+    site_header = gettext_lazy('Django administration')
 
     # Text to put at the top of the admin index page.
-    index_title = ugettext_lazy('Site administration')
+    index_title = gettext_lazy('Site administration')
 
     # URL for the "View site" link at the top of each admin page.
     site_url = '/'

+ 1 - 1
django/contrib/admin/templatetags/admin_list.py

@@ -19,7 +19,7 @@ from django.utils.encoding import force_text
 from django.utils.html import format_html
 from django.utils.safestring import mark_safe
 from django.utils.text import capfirst
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
 
 register = Library()
 

+ 1 - 1
django/contrib/admin/tests.py

@@ -2,7 +2,7 @@ from django.contrib.staticfiles.testing import StaticLiveServerTestCase
 from django.test import modify_settings
 from django.test.selenium import SeleniumTestCase
 from django.utils.deprecation import MiddlewareMixin
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
 
 
 class CSPMiddleware(MiddlewareMixin):

+ 2 - 4
django/contrib/admin/utils.py

@@ -14,9 +14,7 @@ from django.utils import formats, timezone
 from django.utils.encoding import force_text, smart_text
 from django.utils.html import format_html
 from django.utils.text import capfirst
-from django.utils.translation import (
-    override as translation_override, ungettext,
-)
+from django.utils.translation import ngettext, override as translation_override
 
 
 class FieldIsAForeignKeyColumnName(Exception):
@@ -271,7 +269,7 @@ def model_ngettext(obj, n=None):
         obj = obj.model
     d = model_format_dict(obj)
     singular, plural = d["verbose_name"], d["verbose_name_plural"]
-    return ungettext(singular, plural, n or 0)
+    return ngettext(singular, plural, n or 0)
 
 
 def lookup_field(name, obj, model_admin=None):

+ 3 - 3
django/contrib/admin/views/main.py

@@ -18,7 +18,7 @@ from django.db import models
 from django.urls import reverse
 from django.utils.encoding import force_text
 from django.utils.http import urlencode
-from django.utils.translation import ugettext
+from django.utils.translation import gettext
 
 # Changelist settings
 ALL_VAR = 'all'
@@ -76,9 +76,9 @@ class ChangeList:
         self.queryset = self.get_queryset(request)
         self.get_results(request)
         if self.is_popup:
-            title = ugettext('Select %s')
+            title = gettext('Select %s')
         else:
-            title = ugettext('Select %s to change')
+            title = gettext('Select %s to change')
         self.title = title % force_text(self.opts.verbose_name)
         self.pk_attname = self.lookup_opts.pk.attname
 

+ 1 - 1
django/contrib/admin/widgets.py

@@ -11,7 +11,7 @@ from django.utils.encoding import force_text
 from django.utils.html import smart_urlquote
 from django.utils.safestring import mark_safe
 from django.utils.text import Truncator
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
 
 
 class FilteredSelectMultiple(forms.SelectMultiple):

+ 1 - 1
django/contrib/admindocs/apps.py

@@ -1,5 +1,5 @@
 from django.apps import AppConfig
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class AdminDocsConfig(AppConfig):

+ 1 - 1
django/contrib/admindocs/views.py

@@ -20,7 +20,7 @@ from django.utils.inspect import (
     func_accepts_kwargs, func_accepts_var_args, func_has_no_args,
     get_func_full_args,
 )
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
 from django.views.generic import TemplateView
 
 # Exclude methods starting with these strings from documentation

+ 2 - 2
django/contrib/auth/admin.py

@@ -16,7 +16,7 @@ from django.urls import reverse
 from django.utils.decorators import method_decorator
 from django.utils.encoding import force_text
 from django.utils.html import escape
-from django.utils.translation import ugettext, ugettext_lazy as _
+from django.utils.translation import gettext, gettext_lazy as _
 from django.views.decorators.csrf import csrf_protect
 from django.views.decorators.debug import sensitive_post_parameters
 
@@ -144,7 +144,7 @@ class UserAdmin(admin.ModelAdmin):
                 form.save()
                 change_message = self.construct_change_message(request, form, None)
                 self.log_change(request, user, change_message)
-                msg = ugettext('Password changed successfully.')
+                msg = gettext('Password changed successfully.')
                 messages.success(request, msg)
                 update_session_auth_hash(request, form.user)
                 return HttpResponseRedirect(

+ 1 - 1
django/contrib/auth/apps.py

@@ -1,7 +1,7 @@
 from django.apps import AppConfig
 from django.core import checks
 from django.db.models.signals import post_migrate
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 from .checks import check_models_permissions, check_user_model
 from .management import create_permissions

+ 1 - 1
django/contrib/auth/base_user.py

@@ -11,7 +11,7 @@ from django.contrib.auth.hashers import (
 from django.db import models
 from django.utils.crypto import get_random_string, salted_hmac
 from django.utils.encoding import force_text
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class BaseUserManager(models.Manager):

+ 4 - 4
django/contrib/auth/forms.py

@@ -15,7 +15,7 @@ from django.template import loader
 from django.utils.encoding import force_bytes
 from django.utils.http import urlsafe_base64_encode
 from django.utils.text import capfirst
-from django.utils.translation import ugettext, ugettext_lazy as _
+from django.utils.translation import gettext, gettext_lazy as _
 
 UserModel = get_user_model()
 
@@ -27,15 +27,15 @@ class ReadOnlyPasswordHashWidget(forms.Widget):
         context = super().get_context(name, value, attrs)
         summary = []
         if not value or value.startswith(UNUSABLE_PASSWORD_PREFIX):
-            summary.append({'label': ugettext("No password set.")})
+            summary.append({'label': gettext("No password set.")})
         else:
             try:
                 hasher = identify_hasher(value)
             except ValueError:
-                summary.append({'label': ugettext("Invalid password format or unknown hashing algorithm.")})
+                summary.append({'label': gettext("Invalid password format or unknown hashing algorithm.")})
             else:
                 for key, value_ in hasher.safe_summary(value).items():
-                    summary.append({'label': ugettext(key), 'value': value_})
+                    summary.append({'label': gettext(key), 'value': value_})
         context['summary'] = summary
         return context
 

+ 1 - 1
django/contrib/auth/hashers.py

@@ -15,7 +15,7 @@ from django.utils.crypto import (
 )
 from django.utils.encoding import force_bytes, force_text
 from django.utils.module_loading import import_string
-from django.utils.translation import ugettext_noop as _
+from django.utils.translation import gettext_noop as _
 
 UNUSABLE_PASSWORD_PREFIX = '!'  # This will never be a valid encoded hash
 UNUSABLE_PASSWORD_SUFFIX_LENGTH = 40  # number of random chars to add after UNUSABLE_PASSWORD_PREFIX

+ 1 - 1
django/contrib/auth/models.py

@@ -7,7 +7,7 @@ from django.core.mail import send_mail
 from django.db import models
 from django.db.models.manager import EmptyManager
 from django.utils import timezone
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 from .validators import UnicodeUsernameValidator
 

+ 3 - 3
django/contrib/auth/password_validation.py

@@ -12,7 +12,7 @@ from django.utils.encoding import force_text
 from django.utils.functional import lazy
 from django.utils.html import format_html
 from django.utils.module_loading import import_string
-from django.utils.translation import ugettext as _, ungettext
+from django.utils.translation import gettext as _, ngettext
 
 
 @functools.lru_cache(maxsize=None)
@@ -99,7 +99,7 @@ class MinimumLengthValidator:
     def validate(self, password, user=None):
         if len(password) < self.min_length:
             raise ValidationError(
-                ungettext(
+                ngettext(
                     "This password is too short. It must contain at least %(min_length)d character.",
                     "This password is too short. It must contain at least %(min_length)d characters.",
                     self.min_length
@@ -109,7 +109,7 @@ class MinimumLengthValidator:
             )
 
     def get_help_text(self):
-        return ungettext(
+        return ngettext(
             "Your password must contain at least %(min_length)d character.",
             "Your password must contain at least %(min_length)d characters.",
             self.min_length

+ 1 - 1
django/contrib/auth/validators.py

@@ -2,7 +2,7 @@ import re
 
 from django.core import validators
 from django.utils.deconstruct import deconstructible
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 @deconstructible

+ 1 - 1
django/contrib/auth/views.py

@@ -21,7 +21,7 @@ from django.utils.decorators import method_decorator
 from django.utils.deprecation import RemovedInDjango21Warning
 from django.utils.encoding import force_text
 from django.utils.http import is_safe_url, urlsafe_base64_decode
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 from django.views.decorators.cache import never_cache
 from django.views.decorators.csrf import csrf_protect
 from django.views.decorators.debug import sensitive_post_parameters

+ 1 - 1
django/contrib/contenttypes/apps.py

@@ -2,7 +2,7 @@ from django.apps import AppConfig
 from django.contrib.contenttypes.checks import check_generic_foreign_keys
 from django.core import checks
 from django.db.models.signals import post_migrate, pre_migrate
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 from .management import (
     create_contenttypes, inject_rename_contenttypes_operations,

+ 1 - 1
django/contrib/contenttypes/models.py

@@ -3,7 +3,7 @@ from collections import defaultdict
 from django.apps import apps
 from django.db import models
 from django.utils.encoding import force_text
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class ContentTypeManager(models.Manager):

+ 1 - 1
django/contrib/contenttypes/views.py

@@ -3,7 +3,7 @@ from django.apps import apps
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.sites.requests import RequestSite
 from django.core.exceptions import ObjectDoesNotExist
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
 
 
 def shortcut(request, content_type_id, object_id):

+ 1 - 1
django/contrib/flatpages/admin.py

@@ -1,7 +1,7 @@
 from django.contrib import admin
 from django.contrib.flatpages.forms import FlatpageForm
 from django.contrib.flatpages.models import FlatPage
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 @admin.register(FlatPage)

+ 1 - 1
django/contrib/flatpages/apps.py

@@ -1,5 +1,5 @@
 from django.apps import AppConfig
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class FlatPagesConfig(AppConfig):

+ 3 - 3
django/contrib/flatpages/forms.py

@@ -1,7 +1,7 @@
 from django import forms
 from django.conf import settings
 from django.contrib.flatpages.models import FlatPage
-from django.utils.translation import ugettext, ugettext_lazy as _
+from django.utils.translation import gettext, gettext_lazy as _
 
 
 class FlatpageForm(forms.ModelForm):
@@ -26,14 +26,14 @@ class FlatpageForm(forms.ModelForm):
         url = self.cleaned_data['url']
         if not url.startswith('/'):
             raise forms.ValidationError(
-                ugettext("URL is missing a leading slash."),
+                gettext("URL is missing a leading slash."),
                 code='missing_leading_slash',
             )
         if (settings.APPEND_SLASH and
                 'django.middleware.common.CommonMiddleware' in settings.MIDDLEWARE and
                 not url.endswith('/')):
             raise forms.ValidationError(
-                ugettext("URL is missing a trailing slash."),
+                gettext("URL is missing a trailing slash."),
                 code='missing_trailing_slash',
             )
         return url

+ 1 - 1
django/contrib/flatpages/models.py

@@ -2,7 +2,7 @@ from django.contrib.sites.models import Site
 from django.db import models
 from django.urls import get_script_prefix
 from django.utils.encoding import iri_to_uri
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class FlatPage(models.Model):

+ 1 - 1
django/contrib/gis/apps.py

@@ -1,6 +1,6 @@
 from django.apps import AppConfig
 from django.core import serializers
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class GISConfig(AppConfig):

+ 1 - 1
django/contrib/gis/db/models/fields.py

@@ -10,7 +10,7 @@ from django.contrib.gis.geometry.backend import Geometry, GeometryException
 from django.core.exceptions import ImproperlyConfigured
 from django.db.models.expressions import Expression
 from django.db.models.fields import Field
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 # Local cache of the spatial_ref_sys table, which holds SRID data for each
 # spatial database alias. This cache exists so that the database isn't queried

+ 1 - 1
django/contrib/gis/forms/fields.py

@@ -1,6 +1,6 @@
 from django import forms
 from django.contrib.gis.geos import GEOSException, GEOSGeometry
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 from .widgets import OpenLayersWidget
 

+ 1 - 1
django/contrib/gis/views.py

@@ -1,5 +1,5 @@
 from django.http import Http404
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
 
 
 def feed(request, url, feed_dict=None):

+ 1 - 1
django/contrib/humanize/apps.py

@@ -1,5 +1,5 @@
 from django.apps import AppConfig
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class HumanizeConfig(AppConfig):

+ 29 - 29
django/contrib/humanize/templatetags/humanize.py

@@ -9,7 +9,7 @@ from django.utils.encoding import force_text
 from django.utils.formats import number_format
 from django.utils.safestring import mark_safe
 from django.utils.timezone import is_aware, utc
-from django.utils.translation import pgettext, ugettext as _, ungettext
+from django.utils.translation import gettext as _, ngettext, pgettext
 
 register = template.Library()
 
@@ -56,48 +56,48 @@ def intcomma(value, use_l10n=True):
 # A tuple of standard large number to their converters
 intword_converters = (
     (6, lambda number: (
-        ungettext('%(value).1f million', '%(value).1f million', number),
-        ungettext('%(value)s million', '%(value)s million', number),
+        ngettext('%(value).1f million', '%(value).1f million', number),
+        ngettext('%(value)s million', '%(value)s million', number),
     )),
     (9, lambda number: (
-        ungettext('%(value).1f billion', '%(value).1f billion', number),
-        ungettext('%(value)s billion', '%(value)s billion', number),
+        ngettext('%(value).1f billion', '%(value).1f billion', number),
+        ngettext('%(value)s billion', '%(value)s billion', number),
     )),
     (12, lambda number: (
-        ungettext('%(value).1f trillion', '%(value).1f trillion', number),
-        ungettext('%(value)s trillion', '%(value)s trillion', number),
+        ngettext('%(value).1f trillion', '%(value).1f trillion', number),
+        ngettext('%(value)s trillion', '%(value)s trillion', number),
     )),
     (15, lambda number: (
-        ungettext('%(value).1f quadrillion', '%(value).1f quadrillion', number),
-        ungettext('%(value)s quadrillion', '%(value)s quadrillion', number),
+        ngettext('%(value).1f quadrillion', '%(value).1f quadrillion', number),
+        ngettext('%(value)s quadrillion', '%(value)s quadrillion', number),
     )),
     (18, lambda number: (
-        ungettext('%(value).1f quintillion', '%(value).1f quintillion', number),
-        ungettext('%(value)s quintillion', '%(value)s quintillion', number),
+        ngettext('%(value).1f quintillion', '%(value).1f quintillion', number),
+        ngettext('%(value)s quintillion', '%(value)s quintillion', number),
     )),
     (21, lambda number: (
-        ungettext('%(value).1f sextillion', '%(value).1f sextillion', number),
-        ungettext('%(value)s sextillion', '%(value)s sextillion', number),
+        ngettext('%(value).1f sextillion', '%(value).1f sextillion', number),
+        ngettext('%(value)s sextillion', '%(value)s sextillion', number),
     )),
     (24, lambda number: (
-        ungettext('%(value).1f septillion', '%(value).1f septillion', number),
-        ungettext('%(value)s septillion', '%(value)s septillion', number),
+        ngettext('%(value).1f septillion', '%(value).1f septillion', number),
+        ngettext('%(value)s septillion', '%(value)s septillion', number),
     )),
     (27, lambda number: (
-        ungettext('%(value).1f octillion', '%(value).1f octillion', number),
-        ungettext('%(value)s octillion', '%(value)s octillion', number),
+        ngettext('%(value).1f octillion', '%(value).1f octillion', number),
+        ngettext('%(value)s octillion', '%(value)s octillion', number),
     )),
     (30, lambda number: (
-        ungettext('%(value).1f nonillion', '%(value).1f nonillion', number),
-        ungettext('%(value)s nonillion', '%(value)s nonillion', number),
+        ngettext('%(value).1f nonillion', '%(value).1f nonillion', number),
+        ngettext('%(value)s nonillion', '%(value)s nonillion', number),
     )),
     (33, lambda number: (
-        ungettext('%(value).1f decillion', '%(value).1f decillion', number),
-        ungettext('%(value)s decillion', '%(value)s decillion', number),
+        ngettext('%(value).1f decillion', '%(value).1f decillion', number),
+        ngettext('%(value)s decillion', '%(value)s decillion', number),
     )),
     (100, lambda number: (
-        ungettext('%(value).1f googol', '%(value).1f googol', number),
-        ungettext('%(value)s googol', '%(value)s googol', number),
+        ngettext('%(value).1f googol', '%(value).1f googol', number),
+        ngettext('%(value)s googol', '%(value)s googol', number),
     )),
 )
 
@@ -202,21 +202,21 @@ def naturaltime(value):
         elif delta.seconds == 0:
             return _('now')
         elif delta.seconds < 60:
-            return ungettext(
+            return ngettext(
                 # Translators: please keep a non-breaking space (U+00A0)
                 # between count and time unit.
                 'a second ago', '%(count)s seconds ago', delta.seconds
             ) % {'count': delta.seconds}
         elif delta.seconds // 60 < 60:
             count = delta.seconds // 60
-            return ungettext(
+            return ngettext(
                 # Translators: please keep a non-breaking space (U+00A0)
                 # between count and time unit.
                 'a minute ago', '%(count)s minutes ago', count
             ) % {'count': count}
         else:
             count = delta.seconds // 60 // 60
-            return ungettext(
+            return ngettext(
                 # Translators: please keep a non-breaking space (U+00A0)
                 # between count and time unit.
                 'an hour ago', '%(count)s hours ago', count
@@ -230,21 +230,21 @@ def naturaltime(value):
         elif delta.seconds == 0:
             return _('now')
         elif delta.seconds < 60:
-            return ungettext(
+            return ngettext(
                 # Translators: please keep a non-breaking space (U+00A0)
                 # between count and time unit.
                 'a second from now', '%(count)s seconds from now', delta.seconds
             ) % {'count': delta.seconds}
         elif delta.seconds // 60 < 60:
             count = delta.seconds // 60
-            return ungettext(
+            return ngettext(
                 # Translators: please keep a non-breaking space (U+00A0)
                 # between count and time unit.
                 'a minute from now', '%(count)s minutes from now', count
             ) % {'count': count}
         else:
             count = delta.seconds // 60 // 60
-            return ungettext(
+            return ngettext(
                 # Translators: please keep a non-breaking space (U+00A0)
                 # between count and time unit.
                 'an hour from now', '%(count)s hours from now', count

+ 1 - 1
django/contrib/messages/apps.py

@@ -1,5 +1,5 @@
 from django.apps import AppConfig
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class MessagesConfig(AppConfig):

+ 1 - 1
django/contrib/postgres/apps.py

@@ -2,7 +2,7 @@ from django.apps import AppConfig
 from django.db import connections
 from django.db.backends.signals import connection_created
 from django.db.models import CharField, TextField
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 from .lookups import SearchLookup, TrigramSimilar, Unaccent
 from .signals import register_hstore_handler

+ 1 - 1
django/contrib/postgres/fields/array.py

@@ -6,7 +6,7 @@ from django.contrib.postgres.validators import ArrayMaxLengthValidator
 from django.core import checks, exceptions
 from django.db.models import Field, IntegerField, Transform
 from django.db.models.lookups import Exact, In
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 from ..utils import prefix_validation_error
 from .utils import AttributeSetter

+ 1 - 1
django/contrib/postgres/fields/hstore.py

@@ -5,7 +5,7 @@ from django.contrib.postgres.fields.array import ArrayField
 from django.core import exceptions
 from django.db.models import Field, TextField, Transform
 from django.utils.encoding import force_text
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 __all__ = ['HStoreField']
 

+ 1 - 1
django/contrib/postgres/fields/jsonb.py

@@ -7,7 +7,7 @@ from django.core import exceptions
 from django.db.models import (
     Field, TextField, Transform, lookups as builtin_lookups,
 )
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 __all__ = ['JSONField']
 

+ 1 - 1
django/contrib/postgres/forms/array.py

@@ -7,7 +7,7 @@ from django.contrib.postgres.validators import (
 )
 from django.core.exceptions import ValidationError
 from django.utils.safestring import mark_safe
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 from ..utils import prefix_validation_error
 

+ 1 - 1
django/contrib/postgres/forms/hstore.py

@@ -2,7 +2,7 @@ import json
 
 from django import forms
 from django.core.exceptions import ValidationError
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 __all__ = ['HStoreField']
 

+ 1 - 1
django/contrib/postgres/forms/jsonb.py

@@ -1,7 +1,7 @@
 import json
 
 from django import forms
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 __all__ = ['JSONField']
 

+ 1 - 1
django/contrib/postgres/forms/ranges.py

@@ -3,7 +3,7 @@ from psycopg2.extras import DateRange, DateTimeTZRange, NumericRange
 from django import forms
 from django.core import exceptions
 from django.forms.widgets import MultiWidget
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 __all__ = ['IntegerRangeField', 'FloatRangeField', 'DateTimeRangeField', 'DateRangeField']
 

+ 1 - 1
django/contrib/postgres/utils.py

@@ -14,7 +14,7 @@ def prefix_validation_error(error, prefix, code, params):
             # We can't simply concatenate messages since they might require
             # their associated parameters to be expressed correctly which
             # is not something `format_lazy` does. For example, proxied
-            # ungettext calls require a count parameter and are converted
+            # ngettext calls require a count parameter and are converted
             # to an empty string if they are missing it.
             message=format_lazy(
                 '{}{}',

+ 3 - 3
django/contrib/postgres/validators.py

@@ -6,18 +6,18 @@ from django.core.validators import (
     MinValueValidator,
 )
 from django.utils.deconstruct import deconstructible
-from django.utils.translation import ugettext_lazy as _, ungettext_lazy
+from django.utils.translation import gettext_lazy as _, ngettext_lazy
 
 
 class ArrayMaxLengthValidator(MaxLengthValidator):
-    message = ungettext_lazy(
+    message = ngettext_lazy(
         'List contains %(show_value)d item, it should contain no more than %(limit_value)d.',
         'List contains %(show_value)d items, it should contain no more than %(limit_value)d.',
         'limit_value')
 
 
 class ArrayMinLengthValidator(MinLengthValidator):
-    message = ungettext_lazy(
+    message = ngettext_lazy(
         'List contains %(show_value)d item, it should contain no fewer than %(limit_value)d.',
         'List contains %(show_value)d items, it should contain no fewer than %(limit_value)d.',
         'limit_value')

+ 1 - 1
django/contrib/redirects/apps.py

@@ -1,5 +1,5 @@
 from django.apps import AppConfig
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class RedirectsConfig(AppConfig):

+ 1 - 1
django/contrib/redirects/models.py

@@ -1,6 +1,6 @@
 from django.contrib.sites.models import Site
 from django.db import models
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class Redirect(models.Model):

+ 1 - 1
django/contrib/sessions/apps.py

@@ -1,5 +1,5 @@
 from django.apps import AppConfig
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class SessionsConfig(AppConfig):

+ 1 - 1
django/contrib/sessions/base_session.py

@@ -3,7 +3,7 @@ This module allows importing AbstractBaseSession even
 when django.contrib.sessions is not in INSTALLED_APPS.
 """
 from django.db import models
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class BaseSessionManager(models.Manager):

+ 1 - 1
django/contrib/sitemaps/apps.py

@@ -1,5 +1,5 @@
 from django.apps import AppConfig
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class SiteMapsConfig(AppConfig):

+ 1 - 1
django/contrib/sites/apps.py

@@ -1,6 +1,6 @@
 from django.apps import AppConfig
 from django.db.models.signals import post_migrate
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 from .management import create_default_site
 

+ 1 - 1
django/contrib/sites/models.py

@@ -4,7 +4,7 @@ from django.core.exceptions import ImproperlyConfigured, ValidationError
 from django.db import models
 from django.db.models.signals import pre_delete, pre_save
 from django.http.request import split_domain_port
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 SITE_CACHE = {}
 

+ 1 - 1
django/contrib/staticfiles/apps.py

@@ -1,7 +1,7 @@
 from django.apps import AppConfig
 from django.contrib.staticfiles.checks import check_finders
 from django.core import checks
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class StaticFilesConfig(AppConfig):

+ 1 - 1
django/contrib/syndication/apps.py

@@ -1,5 +1,5 @@
 from django.apps import AppConfig
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class SyndicationConfig(AppConfig):

+ 1 - 1
django/core/paginator.py

@@ -3,7 +3,7 @@ import warnings
 from math import ceil
 
 from django.utils.functional import cached_property
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class UnorderedObjectListWarning(RuntimeWarning):

+ 6 - 6
django/core/validators.py

@@ -8,7 +8,7 @@ from django.utils.deconstruct import deconstructible
 from django.utils.encoding import force_text
 from django.utils.functional import SimpleLazyObject
 from django.utils.ipv6 import is_valid_ipv6_address
-from django.utils.translation import ugettext_lazy as _, ungettext_lazy
+from django.utils.translation import gettext_lazy as _, ngettext_lazy
 
 # These values, if given to validate(), will trigger the self.required check.
 EMPTY_VALUES = (None, '', [], (), {})
@@ -359,7 +359,7 @@ class MinValueValidator(BaseValidator):
 
 @deconstructible
 class MinLengthValidator(BaseValidator):
-    message = ungettext_lazy(
+    message = ngettext_lazy(
         'Ensure this value has at least %(limit_value)d character (it has %(show_value)d).',
         'Ensure this value has at least %(limit_value)d characters (it has %(show_value)d).',
         'limit_value')
@@ -374,7 +374,7 @@ class MinLengthValidator(BaseValidator):
 
 @deconstructible
 class MaxLengthValidator(BaseValidator):
-    message = ungettext_lazy(
+    message = ngettext_lazy(
         'Ensure this value has at most %(limit_value)d character (it has %(show_value)d).',
         'Ensure this value has at most %(limit_value)d characters (it has %(show_value)d).',
         'limit_value')
@@ -394,17 +394,17 @@ class DecimalValidator:
     expected, otherwise raise ValidationError.
     """
     messages = {
-        'max_digits': ungettext_lazy(
+        'max_digits': ngettext_lazy(
             'Ensure that there are no more than %(max)s digit in total.',
             'Ensure that there are no more than %(max)s digits in total.',
             'max'
         ),
-        'max_decimal_places': ungettext_lazy(
+        'max_decimal_places': ngettext_lazy(
             'Ensure that there are no more than %(max)s decimal place.',
             'Ensure that there are no more than %(max)s decimal places.',
             'max'
         ),
-        'max_whole_digits': ungettext_lazy(
+        'max_whole_digits': ngettext_lazy(
             'Ensure that there are no more than %(max)s digit before the decimal point.',
             'Ensure that there are no more than %(max)s digits before the decimal point.',
             'max'

+ 1 - 1
django/db/models/base.py

@@ -29,7 +29,7 @@ from django.db.models.utils import make_model_tuple
 from django.utils.encoding import force_text
 from django.utils.functional import curry
 from django.utils.text import capfirst, get_text_list
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 from django.utils.version import get_version
 
 

+ 1 - 1
django/db/models/fields/__init__.py

@@ -30,7 +30,7 @@ from django.utils.functional import Promise, cached_property, curry
 from django.utils.ipv6 import clean_ipv6_address
 from django.utils.itercompat import is_iterable
 from django.utils.text import capfirst
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 __all__ = [
     'AutoField', 'BLANK_CHOICE_DASH', 'BigAutoField', 'BigIntegerField',

+ 1 - 1
django/db/models/fields/files.py

@@ -10,7 +10,7 @@ from django.core.validators import validate_image_file_extension
 from django.db.models import signals
 from django.db.models.fields import Field
 from django.utils.encoding import force_text
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class FieldFile(File):

+ 1 - 1
django/db/models/fields/related.py

@@ -14,7 +14,7 @@ from django.db.models.query_utils import PathInfo
 from django.db.models.utils import make_model_tuple
 from django.utils.encoding import force_text
 from django.utils.functional import cached_property, curry
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 from . import Field
 from .related_descriptors import (

+ 1 - 1
django/forms/boundfield.py

@@ -9,7 +9,7 @@ from django.utils.functional import cached_property
 from django.utils.html import conditional_escape, format_html, html_safe
 from django.utils.inspect import func_supports_parameter
 from django.utils.safestring import mark_safe
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 __all__ = ('BoundField',)
 

+ 2 - 2
django/forms/fields.py

@@ -30,7 +30,7 @@ from django.utils.dateparse import parse_duration
 from django.utils.duration import duration_string
 from django.utils.encoding import force_text
 from django.utils.ipv6 import clean_ipv6_address
-from django.utils.translation import ugettext_lazy as _, ungettext_lazy
+from django.utils.translation import gettext_lazy as _, ngettext_lazy
 
 __all__ = (
     'Field', 'CharField', 'IntegerField',
@@ -534,7 +534,7 @@ class FileField(Field):
         'invalid': _("No file was submitted. Check the encoding type on the form."),
         'missing': _("No file was submitted."),
         'empty': _("The submitted file is empty."),
-        'max_length': ungettext_lazy(
+        'max_length': ngettext_lazy(
             'Ensure this filename has at most %(max)d character (it has %(length)d).',
             'Ensure this filename has at most %(max)d characters (it has %(length)d).',
             'max'),

+ 1 - 1
django/forms/forms.py

@@ -16,7 +16,7 @@ from django.utils.encoding import force_text
 from django.utils.functional import cached_property
 from django.utils.html import conditional_escape, html_safe
 from django.utils.safestring import mark_safe
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
 
 from .renderers import get_default_renderer
 

+ 3 - 3
django/forms/formsets.py

@@ -6,7 +6,7 @@ from django.forms.widgets import HiddenInput
 from django.utils.functional import cached_property
 from django.utils.html import html_safe
 from django.utils.safestring import mark_safe
-from django.utils.translation import ugettext as _, ungettext
+from django.utils.translation import gettext as _, ngettext
 
 __all__ = ('BaseFormSet', 'formset_factory', 'all_valid')
 
@@ -341,14 +341,14 @@ class BaseFormSet:
             if (self.validate_max and
                     self.total_form_count() - len(self.deleted_forms) > self.max_num) or \
                     self.management_form.cleaned_data[TOTAL_FORM_COUNT] > self.absolute_max:
-                raise ValidationError(ungettext(
+                raise ValidationError(ngettext(
                     "Please submit %d or fewer forms.",
                     "Please submit %d or fewer forms.", self.max_num) % self.max_num,
                     code='too_many_forms',
                 )
             if (self.validate_min and
                     self.total_form_count() - len(self.deleted_forms) - empty_forms_count < self.min_num):
-                raise ValidationError(ungettext(
+                raise ValidationError(ngettext(
                     "Please submit %d or more forms.",
                     "Please submit %d or more forms.", self.min_num) % self.min_num,
                     code='too_few_forms')

+ 5 - 5
django/forms/models.py

@@ -18,7 +18,7 @@ from django.forms.widgets import (
 )
 from django.utils.encoding import force_text
 from django.utils.text import capfirst, get_text_list
-from django.utils.translation import ugettext, ugettext_lazy as _
+from django.utils.translation import gettext, gettext_lazy as _
 
 __all__ = (
     'ModelForm', 'BaseModelForm', 'model_to_dict', 'fields_for_model',
@@ -719,16 +719,16 @@ class BaseModelFormSet(BaseFormSet):
 
     def get_unique_error_message(self, unique_check):
         if len(unique_check) == 1:
-            return ugettext("Please correct the duplicate data for %(field)s.") % {
+            return gettext("Please correct the duplicate data for %(field)s.") % {
                 "field": unique_check[0],
             }
         else:
-            return ugettext("Please correct the duplicate data for %(field)s, which must be unique.") % {
+            return gettext("Please correct the duplicate data for %(field)s, which must be unique.") % {
                 "field": get_text_list(unique_check, _("and")),
             }
 
     def get_date_error_message(self, date_check):
-        return ugettext(
+        return gettext(
             "Please correct the duplicate data for %(field_name)s "
             "which must be unique for the %(lookup)s in %(date_field)s."
         ) % {
@@ -738,7 +738,7 @@ class BaseModelFormSet(BaseFormSet):
         }
 
     def get_form_error(self):
-        return ugettext("Please correct the duplicate values below.")
+        return gettext("Please correct the duplicate values below.")
 
     def save_existing_objects(self, commit=True):
         self.changed_objects = []

+ 1 - 1
django/forms/utils.py

@@ -6,7 +6,7 @@ from django.core.exceptions import ValidationError  # backwards compatibility
 from django.utils import timezone
 from django.utils.encoding import force_text
 from django.utils.html import escape, format_html, format_html_join, html_safe
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 def pretty_name(name):

+ 7 - 7
django/forms/widgets.py

@@ -17,7 +17,7 @@ from django.utils.encoding import force_text
 from django.utils.formats import get_format
 from django.utils.html import format_html, html_safe
 from django.utils.safestring import mark_safe
-from django.utils.translation import ugettext_lazy
+from django.utils.translation import gettext_lazy as _
 
 from .renderers import get_default_renderer
 
@@ -358,9 +358,9 @@ FILE_INPUT_CONTRADICTION = object()
 
 
 class ClearableFileInput(FileInput):
-    clear_checkbox_label = ugettext_lazy('Clear')
-    initial_text = ugettext_lazy('Currently')
-    input_text = ugettext_lazy('Change')
+    clear_checkbox_label = _('Clear')
+    initial_text = _('Currently')
+    input_text = _('Change')
     template_name = 'django/forms/widgets/clearable_file_input.html'
 
     def clear_checkbox_name(self, name):
@@ -690,9 +690,9 @@ class NullBooleanSelect(Select):
     """
     def __init__(self, attrs=None):
         choices = (
-            ('1', ugettext_lazy('Unknown')),
-            ('2', ugettext_lazy('Yes')),
-            ('3', ugettext_lazy('No')),
+            ('1', _('Unknown')),
+            ('2', _('Yes')),
+            ('3', _('No')),
         )
         super().__init__(attrs, choices)
 

+ 2 - 2
django/template/base.py

@@ -65,7 +65,7 @@ from django.utils.text import (
     get_text_list, smart_split, unescape_string_literal,
 )
 from django.utils.timezone import template_localtime
-from django.utils.translation import pgettext_lazy, ugettext_lazy
+from django.utils.translation import gettext_lazy, pgettext_lazy
 
 from .exceptions import TemplateSyntaxError
 
@@ -824,7 +824,7 @@ class Variable:
             if self.message_context:
                 return pgettext_lazy(self.message_context, msgid)
             else:
-                return ugettext_lazy(msgid)
+                return gettext_lazy(msgid)
         return value
 
     def __repr__(self):

+ 9 - 9
django/template/defaultfilters.py

@@ -19,7 +19,7 @@ from django.utils.text import (
     Truncator, normalize_newlines, phone2numeric, slugify as _slugify, wrap,
 )
 from django.utils.timesince import timesince, timeuntil
-from django.utils.translation import ugettext, ungettext
+from django.utils.translation import gettext, ngettext
 
 from .base import Variable, VariableDoesNotExist
 from .library import Library
@@ -817,7 +817,7 @@ def yesno(value, arg=None):
     ==========  ======================  ==================================
     """
     if arg is None:
-        arg = ugettext('yes,no,maybe')
+        arg = gettext('yes,no,maybe')
     bits = arg.split(',')
     if len(bits) < 2:
         return value  # Invalid arg.
@@ -846,7 +846,7 @@ def filesizeformat(bytes_):
     try:
         bytes_ = float(bytes_)
     except (TypeError, ValueError, UnicodeDecodeError):
-        value = ungettext("%(size)d byte", "%(size)d bytes", 0) % {'size': 0}
+        value = ngettext("%(size)d byte", "%(size)d bytes", 0) % {'size': 0}
         return avoid_wrapping(value)
 
     def filesize_number_format(value):
@@ -863,17 +863,17 @@ def filesizeformat(bytes_):
         bytes_ = -bytes_  # Allow formatting of negative numbers.
 
     if bytes_ < KB:
-        value = ungettext("%(size)d byte", "%(size)d bytes", bytes_) % {'size': bytes_}
+        value = ngettext("%(size)d byte", "%(size)d bytes", bytes_) % {'size': bytes_}
     elif bytes_ < MB:
-        value = ugettext("%s KB") % filesize_number_format(bytes_ / KB)
+        value = gettext("%s KB") % filesize_number_format(bytes_ / KB)
     elif bytes_ < GB:
-        value = ugettext("%s MB") % filesize_number_format(bytes_ / MB)
+        value = gettext("%s MB") % filesize_number_format(bytes_ / MB)
     elif bytes_ < TB:
-        value = ugettext("%s GB") % filesize_number_format(bytes_ / GB)
+        value = gettext("%s GB") % filesize_number_format(bytes_ / GB)
     elif bytes_ < PB:
-        value = ugettext("%s TB") % filesize_number_format(bytes_ / TB)
+        value = gettext("%s TB") % filesize_number_format(bytes_ / TB)
     else:
-        value = ugettext("%s PB") % filesize_number_format(bytes_ / PB)
+        value = gettext("%s PB") % filesize_number_format(bytes_ / PB)
 
     if negative:
         value = "-%s" % value

+ 4 - 4
django/templatetags/i18n.py

@@ -13,7 +13,7 @@ class GetAvailableLanguagesNode(Node):
         self.variable = variable
 
     def render(self, context):
-        context[self.variable] = [(k, translation.ugettext(v)) for k, v in settings.LANGUAGES]
+        context[self.variable] = [(k, translation.gettext(v)) for k, v in settings.LANGUAGES]
         return ''
 
 
@@ -142,13 +142,13 @@ class BlockTranslateNode(Node):
                 result = translation.npgettext(message_context, singular,
                                                plural, count)
             else:
-                result = translation.ungettext(singular, plural, count)
+                result = translation.ngettext(singular, plural, count)
             vars.extend(plural_vars)
         else:
             if message_context:
                 result = translation.pgettext(message_context, singular)
             else:
-                result = translation.ugettext(singular)
+                result = translation.gettext(singular)
         default_value = context.template.engine.string_if_invalid
 
         def render_value(key):
@@ -267,7 +267,7 @@ def language_name(lang_code):
 @register.filter
 def language_name_translated(lang_code):
     english_name = translation.get_language_info(lang_code)['name']
-    return translation.ugettext(english_name)
+    return translation.gettext(english_name)
 
 
 @register.filter

+ 1 - 1
django/urls/resolvers.py

@@ -114,7 +114,7 @@ class LocaleRegexProvider:
     """
     def __init__(self, regex):
         # regex is either a string representing a regular expression, or a
-        # translatable string (using ugettext_lazy) representing a regular
+        # translatable string (using gettext_lazy) representing a regular
         # expression.
         self._regex = regex
         self._regex_dict = {}

+ 1 - 1
django/utils/dateformat.py

@@ -20,7 +20,7 @@ from django.utils.dates import (
 )
 from django.utils.encoding import force_text
 from django.utils.timezone import get_default_timezone, is_aware, is_naive
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
 
 re_formatchars = re.compile(r'(?<!\\)([aAbBcdDeEfFgGhHiIjlLmMnNoOPrsStTUuwWyYzZ])')
 re_escaped = re.compile(r'\\(.)')

+ 1 - 1
django/utils/dates.py

@@ -1,6 +1,6 @@
 "Commonly-used date structures"
 
-from django.utils.translation import pgettext_lazy, ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _, pgettext_lazy
 
 WEEKDAYS = {
     0: _('Monday'), 1: _('Tuesday'), 2: _('Wednesday'), 3: _('Thursday'), 4: _('Friday'),

+ 1 - 1
django/utils/ipv6.py

@@ -1,7 +1,7 @@
 import ipaddress
 
 from django.core.exceptions import ValidationError
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 def clean_ipv6_address(ip_str, unpack_ipv4=False,

+ 2 - 2
django/utils/text.py

@@ -9,7 +9,7 @@ from django.utils.functional import (
     SimpleLazyObject, keep_lazy, keep_lazy_text, lazy,
 )
 from django.utils.safestring import SafeText, mark_safe
-from django.utils.translation import pgettext, ugettext as _, ugettext_lazy
+from django.utils.translation import gettext as _, gettext_lazy, pgettext
 
 
 @keep_lazy_text
@@ -240,7 +240,7 @@ def get_valid_filename(s):
 
 
 @keep_lazy_text
-def get_text_list(list_, last_word=ugettext_lazy('or')):
+def get_text_list(list_, last_word=gettext_lazy('or')):
     """
     >>> get_text_list(['a', 'b', 'c', 'd'])
     'a, b, c or d'

+ 9 - 9
django/utils/timesince.py

@@ -3,15 +3,15 @@ import datetime
 
 from django.utils.html import avoid_wrapping
 from django.utils.timezone import is_aware, utc
-from django.utils.translation import ugettext, ungettext_lazy
+from django.utils.translation import gettext, ngettext_lazy
 
 TIMESINCE_CHUNKS = (
-    (60 * 60 * 24 * 365, ungettext_lazy('%d year', '%d years')),
-    (60 * 60 * 24 * 30, ungettext_lazy('%d month', '%d months')),
-    (60 * 60 * 24 * 7, ungettext_lazy('%d week', '%d weeks')),
-    (60 * 60 * 24, ungettext_lazy('%d day', '%d days')),
-    (60 * 60, ungettext_lazy('%d hour', '%d hours')),
-    (60, ungettext_lazy('%d minute', '%d minutes'))
+    (60 * 60 * 24 * 365, ngettext_lazy('%d year', '%d years')),
+    (60 * 60 * 24 * 30, ngettext_lazy('%d month', '%d months')),
+    (60 * 60 * 24 * 7, ngettext_lazy('%d week', '%d weeks')),
+    (60 * 60 * 24, ngettext_lazy('%d day', '%d days')),
+    (60 * 60, ngettext_lazy('%d hour', '%d hours')),
+    (60, ngettext_lazy('%d minute', '%d minutes'))
 )
 
 
@@ -55,7 +55,7 @@ def timesince(d, now=None, reversed=False):
     since = delta.days * 24 * 60 * 60 + delta.seconds
     if since <= 0:
         # d is in the future compared to now, stop processing.
-        return avoid_wrapping(ugettext('0 minutes'))
+        return avoid_wrapping(gettext('0 minutes'))
     for i, (seconds, name) in enumerate(TIMESINCE_CHUNKS):
         count = since // seconds
         if count != 0:
@@ -66,7 +66,7 @@ def timesince(d, now=None, reversed=False):
         seconds2, name2 = TIMESINCE_CHUNKS[i + 1]
         count2 = (since - (seconds * count)) // seconds2
         if count2 != 0:
-            result += ugettext(', ') + avoid_wrapping(name2 % count2)
+            result += gettext(', ') + avoid_wrapping(name2 % count2)
     return result
 
 

+ 1 - 1
django/utils/translation/__init__.py

@@ -250,7 +250,7 @@ def get_language_info(lang_code):
             raise KeyError("Unknown language code %s and %s." % (lang_code, generic_lang_code))
 
     if info:
-        info['name_translated'] = ugettext_lazy(info['name'])
+        info['name_translated'] = gettext_lazy(info['name'])
     return info
 
 

+ 1 - 1
django/views/csrf.py

@@ -1,7 +1,7 @@
 from django.conf import settings
 from django.http import HttpResponseForbidden
 from django.template import Context, Engine, TemplateDoesNotExist, loader
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
 from django.utils.version import get_docs_version
 
 # We include the template inline since we need to be able to reliably display

+ 1 - 1
django/views/debug.py

@@ -12,7 +12,7 @@ from django.utils import timezone
 from django.utils.datastructures import MultiValueDict
 from django.utils.encoding import force_text
 from django.utils.module_loading import import_string
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
 
 # Minimal Django templates engine to render the error templates
 # regardless of the project's TEMPLATES setting.

+ 1 - 1
django/views/generic/dates.py

@@ -7,7 +7,7 @@ from django.http import Http404
 from django.utils import timezone
 from django.utils.encoding import force_text
 from django.utils.functional import cached_property
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
 from django.views.generic.base import View
 from django.views.generic.detail import (
     BaseDetailView, SingleObjectTemplateResponseMixin,

+ 1 - 1
django/views/generic/detail.py

@@ -1,7 +1,7 @@
 from django.core.exceptions import ImproperlyConfigured
 from django.db import models
 from django.http import Http404
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
 from django.views.generic.base import ContextMixin, TemplateResponseMixin, View
 
 

+ 1 - 1
django/views/generic/list.py

@@ -2,7 +2,7 @@ from django.core.exceptions import ImproperlyConfigured
 from django.core.paginator import InvalidPage, Paginator
 from django.db.models.query import QuerySet
 from django.http import Http404
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
 from django.views.generic.base import ContextMixin, TemplateResponseMixin, View
 
 

+ 2 - 2
django/views/static.py

@@ -15,7 +15,7 @@ from django.http import (
 )
 from django.template import Context, Engine, TemplateDoesNotExist, loader
 from django.utils.http import http_date, parse_http_date
-from django.utils.translation import ugettext as _, ugettext_lazy
+from django.utils.translation import gettext as _, gettext_lazy
 
 
 def serve(request, path, document_root=None, show_indexes=False):
@@ -95,7 +95,7 @@ DEFAULT_DIRECTORY_INDEX_TEMPLATE = """
   </body>
 </html>
 """
-template_translatable = ugettext_lazy("Index of %(directory)s")
+template_translatable = gettext_lazy("Index of %(directory)s")
 
 
 def directory_index(path, fullpath):

+ 1 - 1
docs/howto/custom-model-fields.txt

@@ -498,7 +498,7 @@ instances::
 
     from django.core.exceptions import ValidationError
     from django.db import models
-    from django.utils.translation import ugettext_lazy as _
+    from django.utils.translation import gettext_lazy as _
 
     def parse_hand(hand_string):
         """Takes a string of cards and splits into a full hand."""

+ 3 - 3
docs/ref/applications.txt

@@ -457,10 +457,10 @@ Here are some common problems that you may encounter during initialization:
   importing an application configuration or a models module triggers code that
   depends on the app registry.
 
-  For example, :func:`~django.utils.translation.ugettext()` uses the app
+  For example, :func:`~django.utils.translation.gettext()` uses the app
   registry to look up translation catalogs in applications. To translate at
-  import time, you need :func:`~django.utils.translation.ugettext_lazy()`
-  instead. (Using :func:`~django.utils.translation.ugettext()` would be a bug,
+  import time, you need :func:`~django.utils.translation.gettext_lazy()`
+  instead. (Using :func:`~django.utils.translation.gettext()` would be a bug,
   because the translation would happen at import time, rather than at each
   request depending on the active language.)
 

+ 1 - 1
docs/ref/contrib/admin/index.txt

@@ -860,7 +860,7 @@ subclass::
            from datetime import date
 
            from django.contrib import admin
-           from django.utils.translation import ugettext_lazy as _
+           from django.utils.translation import gettext_lazy as _
 
            class DecadeBornListFilter(admin.SimpleListFilter):
                # Human-readable title which will be displayed in the

+ 1 - 1
docs/ref/contrib/flatpages.txt

@@ -186,7 +186,7 @@ registering a custom ``ModelAdmin`` for ``FlatPage``::
     from django.contrib import admin
     from django.contrib.flatpages.admin import FlatPageAdmin
     from django.contrib.flatpages.models import FlatPage
-    from django.utils.translation import ugettext_lazy as _
+    from django.utils.translation import gettext_lazy as _
 
     # Define a new FlatPageAdmin
     class FlatPageAdmin(FlatPageAdmin):

+ 1 - 1
docs/ref/models/instances.txt

@@ -261,7 +261,7 @@ access to more than a single field::
     import datetime
     from django.core.exceptions import ValidationError
     from django.db import models
-    from django.utils.translation import ugettext_lazy as _
+    from django.utils.translation import gettext_lazy as _
 
     class Article(models.Model):
         ...

+ 2 - 2
docs/ref/settings.txt

@@ -1748,11 +1748,11 @@ to restrict language selection to a subset of the Django-provided languages.
 
 If you define a custom :setting:`LANGUAGES` setting, you can mark the
 language names as translation strings using the
-:func:`~django.utils.translation.ugettext_lazy` function.
+:func:`~django.utils.translation.gettext_lazy` function.
 
 Here's a sample settings file::
 
-    from django.utils.translation import ugettext_lazy as _
+    from django.utils.translation import gettext_lazy as _
 
     LANGUAGES = [
         ('de', _('German')),

+ 1 - 1
docs/ref/urls.txt

@@ -34,7 +34,7 @@ Helper function to return a URL pattern for serving files in debug mode::
     ]
 
 The ``regex`` parameter should be a string or
-:func:`~django.utils.translation.ugettext_lazy()` (see
+:func:`~django.utils.translation.gettext_lazy()` (see
 :ref:`translating-urlpatterns`) that contains a regular expression compatible
 with Python's :py:mod:`re` module. Strings typically use raw string syntax
 (``r''``) so that they can contain sequences like ``\d`` without the need to

+ 1 - 1
docs/ref/validators.txt

@@ -16,7 +16,7 @@ different types of fields.
 For example, here's a validator that only allows even numbers::
 
     from django.core.exceptions import ValidationError
-    from django.utils.translation import ugettext_lazy as _
+    from django.utils.translation import gettext_lazy as _
 
     def validate_even(value):
         if value % 2 != 0:

+ 1 - 1
docs/topics/auth/passwords.txt

@@ -646,7 +646,7 @@ have a default value.
 Here's a basic example of a validator, with one optional setting::
 
     from django.core.exceptions import ValidationError
-    from django.utils.translation import ugettext as _
+    from django.utils.translation import gettext as _
 
     class MinimumLengthValidator(object):
         def __init__(self, min_length=8):

+ 1 - 1
docs/topics/forms/modelforms.txt

@@ -521,7 +521,7 @@ attributes of the inner ``Meta`` class if you want to further customize a field.
 For example if you wanted to customize the wording of all user facing strings for
 the ``name`` field::
 
-    from django.utils.translation import ugettext_lazy as _
+    from django.utils.translation import gettext_lazy as _
 
     class AuthorForm(ModelForm):
         class Meta:

+ 53 - 55
docs/topics/i18n/translation.txt

@@ -49,7 +49,7 @@ Standard translation
 --------------------
 
 Specify a translation string by using the function
-:func:`~django.utils.translation.ugettext`. It's convention to import this
+:func:`~django.utils.translation.gettext`. It's convention to import this
 as a shorter alias, ``_``, to save typing.
 
 .. note::
@@ -63,7 +63,7 @@ as a shorter alias, ``_``, to save typing.
     global namespace, as an alias for ``gettext()``. In Django, we have chosen
     not to follow this practice, for a couple of reasons:
 
-    1. Sometimes, you should use :func:`~django.utils.translation.ugettext_lazy`
+    1. Sometimes, you should use :func:`~django.utils.translation.gettext_lazy`
        as the default translation method for a particular file. Without ``_()``
        in the global namespace, the developer has to think about which is the
        most appropriate translation function.
@@ -71,7 +71,7 @@ as a shorter alias, ``_``, to save typing.
     2. The underscore character (``_``) is used to represent "the previous
        result" in Python's interactive shell and doctest tests. Installing a
        global ``_()`` function causes interference. Explicitly importing
-       ``ugettext()`` as ``_()`` avoids this problem.
+       ``gettext()`` as ``_()`` avoids this problem.
 
 .. admonition:: What functions may be aliased as ``_``?
 
@@ -80,13 +80,11 @@ as a shorter alias, ``_``, to save typing.
 
     * :func:`~django.utils.translation.gettext`
     * :func:`~django.utils.translation.gettext_lazy`
-    * :func:`~django.utils.translation.ugettext`
-    * :func:`~django.utils.translation.ugettext_lazy`
 
 In this example, the text ``"Welcome to my site."`` is marked as a translation
 string::
 
-    from django.utils.translation import ugettext as _
+    from django.utils.translation import gettext as _
     from django.http import HttpResponse
 
     def my_view(request):
@@ -96,11 +94,11 @@ string::
 Obviously, you could code this without using the alias. This example is
 identical to the previous one::
 
-    from django.utils.translation import ugettext
+    from django.utils.translation import gettext
     from django.http import HttpResponse
 
     def my_view(request):
-        output = ugettext("Welcome to my site.")
+        output = gettext("Welcome to my site.")
         return HttpResponse(output)
 
 Translation works on computed values. This example is identical to the previous
@@ -123,7 +121,7 @@ examples, is that Django's translation-string-detecting utility,
 :djadmin:`django-admin makemessages <makemessages>`, won't be able to find
 these strings. More on :djadmin:`makemessages` later.)
 
-The strings you pass to ``_()`` or ``ugettext()`` can take placeholders,
+The strings you pass to ``_()`` or ``gettext()`` can take placeholders,
 specified with Python's standard named-string interpolation syntax. Example::
 
     def my_view(request, m, d):
@@ -151,7 +149,7 @@ preceding the string, e.g.::
 
     def my_view(request):
         # Translators: This message appears on the home page only
-        output = ugettext("Welcome to my site.")
+        output = gettext("Welcome to my site.")
 
 The comment will then appear in the resulting ``.po`` file associated with the
 translatable construct located below it and should also be displayed by most
@@ -173,7 +171,7 @@ more details.
 Marking strings as no-op
 ------------------------
 
-Use the function :func:`django.utils.translation.ugettext_noop()` to mark a
+Use the function :func:`django.utils.translation.gettext_noop()` to mark a
 string as a translation string without translating it. The string is later
 translated from a variable.
 
@@ -185,11 +183,11 @@ such as when the string is presented to the user.
 Pluralization
 -------------
 
-Use the function :func:`django.utils.translation.ungettext()` to specify
+Use the function :func:`django.utils.translation.ngettext()` to specify
 pluralized messages.
 
-``ungettext`` takes three arguments: the singular translation string, the plural
-translation string and the number of objects.
+``ngettext()`` takes three arguments: the singular translation string, the
+plural translation string and the number of objects.
 
 This function is useful when you need your Django application to be localizable
 to languages where the number and complexity of `plural forms
@@ -200,11 +198,11 @@ of its value.)
 
 For example::
 
-    from django.utils.translation import ungettext
+    from django.utils.translation import ngettext
     from django.http import HttpResponse
 
     def hello_world(request, count):
-        page = ungettext(
+        page = ngettext(
             'there is %(count)d object',
             'there are %(count)d objects',
         count) % {
@@ -219,7 +217,7 @@ Note that pluralization is complicated and works differently in each language.
 Comparing ``count`` to 1 isn't always the correct rule. This code looks
 sophisticated, but will produce incorrect results for some languages::
 
-    from django.utils.translation import ungettext
+    from django.utils.translation import ngettext
     from myapp.models import Report
 
     count = Report.objects.count()
@@ -228,7 +226,7 @@ sophisticated, but will produce incorrect results for some languages::
     else:
         name = Report._meta.verbose_name_plural
 
-    text = ungettext(
+    text = ngettext(
         'There is %(count)d %(name)s available.',
         'There are %(count)d %(name)s available.',
         count
@@ -240,7 +238,7 @@ sophisticated, but will produce incorrect results for some languages::
 Don't try to implement your own singular-or-plural logic, it won't be correct.
 In a case like this, consider something like the following::
 
-    text = ungettext(
+    text = ngettext(
         'There is %(count)d %(name)s object available.',
         'There are %(count)d %(name)s objects available.',
         count
@@ -253,13 +251,13 @@ In a case like this, consider something like the following::
 
 .. note::
 
-    When using ``ungettext()``, make sure you use a single name for every
+    When using ``ngettext()``, make sure you use a single name for every
     extrapolated variable included in the literal. In the examples above, note
     how we used the ``name`` Python variable in both translation strings. This
     example, besides being incorrect in some languages as noted above, would
     fail::
 
-        text = ungettext(
+        text = ngettext(
             'There is %(count)d %(name)s available.',
             'There are %(count)d %(plural_name)s available.',
             count
@@ -355,7 +353,7 @@ For example, to translate the help text of the *name* field in the following
 model, do the following::
 
     from django.db import models
-    from django.utils.translation import ugettext_lazy as _
+    from django.utils.translation import gettext_lazy as _
 
     class MyThing(models.Model):
         name = models.CharField(help_text=_('This is the help text'))
@@ -387,7 +385,7 @@ relying on the fallback English-centric and somewhat naïve determination of
 verbose names Django performs by looking at the model's class name::
 
     from django.db import models
-    from django.utils.translation import ugettext_lazy as _
+    from django.utils.translation import gettext_lazy as _
 
     class MyThing(models.Model):
         name = models.CharField(_('name'), help_text=_('This is the help text'))
@@ -403,7 +401,7 @@ For model methods, you can provide translations to Django and the admin site
 with the ``short_description`` attribute::
 
     from django.db import models
-    from django.utils.translation import ugettext_lazy as _
+    from django.utils.translation import gettext_lazy as _
 
     class MyThing(models.Model):
         kind = models.ForeignKey(
@@ -420,30 +418,30 @@ with the ``short_description`` attribute::
 Working with lazy translation objects
 -------------------------------------
 
-The result of a ``ugettext_lazy()`` call can be used wherever you would use a
-string (a :class:`str` object) in other Django code, but it may not
-work with arbitrary Python code. For example, the following won't work because
-the `requests <https://pypi.python.org/pypi/requests/>`_ library doesn't handle
-``ugettext_lazy`` objects::
+The result of a ``gettext_lazy()`` call can be used wherever you would use a
+string (a :class:`str` object) in other Django code, but it may not work with
+arbitrary Python code. For example, the following won't work because the
+`requests <https://pypi.python.org/pypi/requests/>`_ library doesn't handle
+``gettext_lazy`` objects::
 
-    body = ugettext_lazy("I \u2764 Django")  # (unicode :heart:)
+    body = gettext_lazy("I \u2764 Django")  # (unicode :heart:)
     requests.post('https://example.com/send', data={'body': body})
 
-You can avoid such problems by casting ``ugettext_lazy()`` objects to text
+You can avoid such problems by casting ``gettext_lazy()`` objects to text
 strings before passing them to non-Django code::
 
     requests.post('https://example.com/send', data={'body': str(body)})
 
-If you don't like the long ``ugettext_lazy`` name, you can just alias it as
+If you don't like the long ``gettext_lazy`` name, you can just alias it as
 ``_`` (underscore), like so::
 
     from django.db import models
-    from django.utils.translation import ugettext_lazy as _
+    from django.utils.translation import gettext_lazy as _
 
     class MyThing(models.Model):
         name = models.CharField(help_text=_('This is the help text'))
 
-Using ``ugettext_lazy()`` and ``ungettext_lazy()`` to mark strings in models
+Using ``gettext_lazy()`` and ``ngettext_lazy()`` to mark strings in models
 and utility functions is a common operation. When you're working with these
 objects elsewhere in your code, you should ensure that you don't accidentally
 convert them to strings, because they should be converted as late as possible
@@ -462,10 +460,10 @@ integer as the ``number`` argument. Then ``number`` will be looked up in the
 dictionary under that key during string interpolation. Here's example::
 
     from django import forms
-    from django.utils.translation import ungettext_lazy
+    from django.utils.translation import ngettext_lazy
 
     class MyForm(forms.Form):
-        error_message = ungettext_lazy("You only provided %(num)d argument",
+        error_message = ngettext_lazy("You only provided %(num)d argument",
             "You only provided %(num)d arguments", 'num')
 
         def clean(self):
@@ -477,7 +475,7 @@ If the string contains exactly one unnamed placeholder, you can interpolate
 directly with the ``number`` argument::
 
     class MyForm(forms.Form):
-        error_message = ungettext_lazy(
+        error_message = ngettext_lazy(
             "You provided %d argument",
             "You provided %d arguments",
         )
@@ -499,10 +497,10 @@ that runs the ``str.format()`` method only when the result is included
 in a string. For example::
 
     from django.utils.text import format_lazy
-    from django.utils.translation import ugettext_lazy
+    from django.utils.translation import gettext_lazy
     ...
-    name = ugettext_lazy('John Lennon')
-    instrument = ugettext_lazy('guitar')
+    name = gettext_lazy('John Lennon')
+    instrument = gettext_lazy('guitar')
     result = format_lazy('{name}: {instrument}', name=name, instrument=instrument)
 
 In this case, the lazy translations in ``result`` will only be converted to
@@ -518,7 +516,7 @@ this function inside a lazy call yourself. For example::
 
     from django.utils.functional import lazy
     from django.utils.safestring import mark_safe
-    from django.utils.translation import ugettext_lazy as _
+    from django.utils.translation import gettext_lazy as _
 
     mark_safe_lazy = lazy(mark_safe, str)
 
@@ -580,7 +578,7 @@ require translation in the future::
     <title>{% trans "myvar" noop %}</title>
 
 Internally, inline translations use an
-:func:`~django.utils.translation.ugettext` call.
+:func:`~django.utils.translation.gettext` call.
 
 In case a template var (``myvar`` above) is passed to the tag, the tag will
 first resolve such variable to a string at run-time and then look up that
@@ -690,8 +688,8 @@ A more complex example::
 
 When you use both the pluralization feature and bind values to local variables
 in addition to the counter value, keep in mind that the ``blocktrans``
-construct is internally converted to an ``ungettext`` call. This means the
-same :ref:`notes regarding ungettext variables <pluralization-var-notes>`
+construct is internally converted to an ``ngettext`` call. This means the
+same :ref:`notes regarding ngettext variables <pluralization-var-notes>`
 apply.
 
 Reverse URL lookups cannot be carried out within the ``blocktrans`` and should
@@ -1282,7 +1280,7 @@ Django provides two mechanisms to internationalize URL patterns:
   the language to activate from the requested URL.
 
 * Making URL patterns themselves translatable via the
-  :func:`django.utils.translation.ugettext_lazy()` function.
+  :func:`django.utils.translation.gettext_lazy()` function.
 
 .. warning::
 
@@ -1373,11 +1371,11 @@ Translating URL patterns
 ------------------------
 
 URL patterns can also be marked translatable using the
-:func:`~django.utils.translation.ugettext_lazy` function. Example::
+:func:`~django.utils.translation.gettext_lazy` function. Example::
 
     from django.conf.urls import include, url
     from django.conf.urls.i18n import i18n_patterns
-    from django.utils.translation import ugettext_lazy as _
+    from django.utils.translation import gettext_lazy as _
 
     from about import views as about_views
     from news import views as news_views
@@ -1639,12 +1637,12 @@ That's it. Your translations are ready for use.
    (Byte Order Mark) so if your text editor adds such marks to the beginning of
    files by default then you will need to reconfigure it.
 
-Troubleshooting: ``ugettext()`` incorrectly detects ``python-format`` in strings with percent signs
+Troubleshooting: ``gettext()`` incorrectly detects ``python-format`` in strings with percent signs
 ---------------------------------------------------------------------------------------------------
 
 In some cases, such as strings with a percent sign followed by a space and a
 :ref:`string conversion type <old-string-formatting>` (e.g.
-``_("10% interest")``), :func:`~django.utils.translation.ugettext` incorrectly
+``_("10% interest")``), :func:`~django.utils.translation.gettext` incorrectly
 flags strings with ``python-format``.
 
 If you try to compile message files with incorrectly flagged strings, you'll
@@ -1655,7 +1653,7 @@ unlike 'msgid'``.
 To workaround this, you can escape percent signs by adding a second percent
 sign::
 
-    from django.utils.translation import ugettext as _
+    from django.utils.translation import gettext as _
     output = _("10%% interest)
 
 Or you can use ``no-python-format`` so that all percent signs are treated as
@@ -1859,7 +1857,7 @@ For example::
         cur_language = translation.get_language()
         try:
             translation.activate(language)
-            text = translation.ugettext('welcome')
+            text = translation.gettext('welcome')
         finally:
             translation.activate(cur_language)
         return text
@@ -1882,7 +1880,7 @@ enter and restores it on exit. With it, the above example becomes::
 
     def welcome_translated(language):
         with translation.override(language):
-            return translation.ugettext('welcome')
+            return translation.gettext('welcome')
 
 Language cookie
 ---------------
@@ -2016,12 +2014,12 @@ Notes:
 
 * If you define a custom :setting:`LANGUAGES` setting, as explained in the
   previous bullet, you can mark the language names as translation strings
-  -- but use :func:`~django.utils.translation.ugettext_lazy` instead of
-  :func:`~django.utils.translation.ugettext` to avoid a circular import.
+  -- but use :func:`~django.utils.translation.gettext_lazy` instead of
+  :func:`~django.utils.translation.gettext` to avoid a circular import.
 
   Here's a sample settings file::
 
-      from django.utils.translation import ugettext_lazy as _
+      from django.utils.translation import gettext_lazy as _
 
       LANGUAGES = [
           ('de', _('German')),

+ 1 - 1
tests/admin_utils/models.py

@@ -1,5 +1,5 @@
 from django.db import models
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 
 class Site(models.Model):

+ 1 - 1
tests/auth_tests/test_forms.py

@@ -17,7 +17,7 @@ from django.forms.fields import CharField, Field, IntegerField
 from django.test import SimpleTestCase, TestCase, override_settings
 from django.utils import translation
 from django.utils.text import capfirst
-from django.utils.translation import ugettext as _
+from django.utils.translation import gettext as _
 
 from .models.custom_user import (
     CustomUser, CustomUserWithoutIsActiveField, ExtensionUser,

+ 1 - 1
tests/auth_tests/test_management.py

@@ -16,7 +16,7 @@ from django.core.management import call_command
 from django.core.management.base import CommandError
 from django.db import migrations
 from django.test import TestCase, override_settings
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
 
 from .models import (
     CustomUser, CustomUserNonUniqueUsername, CustomUserWithFK, Email,

部分文件因文件數量過多而無法顯示