Made ugettext* functions aliases of gettext*
Thanks Tim Graham for the review.
This commit is contained in:
parent
9e9e73735e
commit
e34f4e6f87
|
@ -78,16 +78,16 @@ def gettext(message):
|
||||||
return _trans.gettext(message)
|
return _trans.gettext(message)
|
||||||
|
|
||||||
|
|
||||||
|
# An alias since Django 2.0
|
||||||
|
ugettext = gettext
|
||||||
|
|
||||||
|
|
||||||
def ngettext(singular, plural, number):
|
def ngettext(singular, plural, number):
|
||||||
return _trans.ngettext(singular, plural, number)
|
return _trans.ngettext(singular, plural, number)
|
||||||
|
|
||||||
|
|
||||||
def ugettext(message):
|
# An alias since Django 2.0
|
||||||
return _trans.ugettext(message)
|
ungettext = ngettext
|
||||||
|
|
||||||
|
|
||||||
def ungettext(singular, plural, number):
|
|
||||||
return _trans.ungettext(singular, plural, number)
|
|
||||||
|
|
||||||
|
|
||||||
def pgettext(context, message):
|
def pgettext(context, message):
|
||||||
|
@ -98,8 +98,7 @@ def npgettext(context, singular, plural, number):
|
||||||
return _trans.npgettext(context, singular, plural, number)
|
return _trans.npgettext(context, singular, plural, number)
|
||||||
|
|
||||||
|
|
||||||
gettext_lazy = lazy(gettext, str)
|
gettext_lazy = ugettext_lazy = lazy(gettext, str)
|
||||||
ugettext_lazy = lazy(ugettext, str)
|
|
||||||
pgettext_lazy = lazy(pgettext, str)
|
pgettext_lazy = lazy(pgettext, str)
|
||||||
|
|
||||||
|
|
||||||
|
@ -148,8 +147,8 @@ def ngettext_lazy(singular, plural, number=None):
|
||||||
return lazy_number(ngettext, str, singular=singular, plural=plural, number=number)
|
return lazy_number(ngettext, str, singular=singular, plural=plural, number=number)
|
||||||
|
|
||||||
|
|
||||||
def ungettext_lazy(singular, plural, number=None):
|
# An alias since Django 2.0
|
||||||
return lazy_number(ungettext, str, singular=singular, plural=plural, number=number)
|
ungettext_lazy = ngettext_lazy
|
||||||
|
|
||||||
|
|
||||||
def npgettext_lazy(context, singular, plural, number=None):
|
def npgettext_lazy(context, singular, plural, number=None):
|
||||||
|
|
|
@ -3,7 +3,13 @@
|
||||||
# settings.USE_I18N = False can use this module rather than trans_real.py.
|
# settings.USE_I18N = False can use this module rather than trans_real.py.
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.encoding import force_text
|
|
||||||
|
|
||||||
|
def gettext(message):
|
||||||
|
return message
|
||||||
|
|
||||||
|
|
||||||
|
gettext_noop = gettext_lazy = _ = gettext
|
||||||
|
|
||||||
|
|
||||||
def ngettext(singular, plural, number):
|
def ngettext(singular, plural, number):
|
||||||
|
@ -15,16 +21,12 @@ def ngettext(singular, plural, number):
|
||||||
ngettext_lazy = ngettext
|
ngettext_lazy = ngettext
|
||||||
|
|
||||||
|
|
||||||
def ungettext(singular, plural, number):
|
|
||||||
return force_text(ngettext(singular, plural, number))
|
|
||||||
|
|
||||||
|
|
||||||
def pgettext(context, message):
|
def pgettext(context, message):
|
||||||
return ugettext(message)
|
return gettext(message)
|
||||||
|
|
||||||
|
|
||||||
def npgettext(context, singular, plural, number):
|
def npgettext(context, singular, plural, number):
|
||||||
return ungettext(singular, plural, number)
|
return ngettext(singular, plural, number)
|
||||||
|
|
||||||
|
|
||||||
def activate(x):
|
def activate(x):
|
||||||
|
@ -50,17 +52,6 @@ def check_for_language(x):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def gettext(message):
|
|
||||||
return message
|
|
||||||
|
|
||||||
|
|
||||||
def ugettext(message):
|
|
||||||
return force_text(gettext(message))
|
|
||||||
|
|
||||||
|
|
||||||
gettext_noop = gettext_lazy = _ = gettext
|
|
||||||
|
|
||||||
|
|
||||||
def to_locale(language):
|
def to_locale(language):
|
||||||
p = language.find('-')
|
p = language.find('-')
|
||||||
if p >= 0:
|
if p >= 0:
|
||||||
|
|
|
@ -297,10 +297,9 @@ def catalog():
|
||||||
return _default
|
return _default
|
||||||
|
|
||||||
|
|
||||||
def do_translate(message, translation_function):
|
def gettext(message):
|
||||||
"""
|
"""
|
||||||
Translates 'message' using the given 'translation_function' name -- which
|
Translate the 'message' string. It uses the current thread to find the
|
||||||
will be either gettext or ugettext. It uses the current thread to find the
|
|
||||||
translation object to use. If no current translation is activated, the
|
translation object to use. If no current translation is activated, the
|
||||||
message will be run through the default translation object.
|
message will be run through the default translation object.
|
||||||
"""
|
"""
|
||||||
|
@ -316,7 +315,7 @@ def do_translate(message, translation_function):
|
||||||
_default = _default or translation(settings.LANGUAGE_CODE)
|
_default = _default or translation(settings.LANGUAGE_CODE)
|
||||||
translation_object = getattr(_active, "value", _default)
|
translation_object = getattr(_active, "value", _default)
|
||||||
|
|
||||||
result = getattr(translation_object, translation_function)(eol_message)
|
result = translation_object.gettext(eol_message)
|
||||||
|
|
||||||
if isinstance(message, SafeData):
|
if isinstance(message, SafeData):
|
||||||
return mark_safe(result)
|
return mark_safe(result)
|
||||||
|
@ -324,17 +323,9 @@ def do_translate(message, translation_function):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
def gettext(message):
|
|
||||||
"""Return a string of the translation of the message."""
|
|
||||||
return do_translate(message, 'gettext')
|
|
||||||
|
|
||||||
|
|
||||||
ugettext = gettext
|
|
||||||
|
|
||||||
|
|
||||||
def pgettext(context, message):
|
def pgettext(context, message):
|
||||||
msg_with_ctxt = "%s%s%s" % (context, CONTEXT_SEPARATOR, message)
|
msg_with_ctxt = "%s%s%s" % (context, CONTEXT_SEPARATOR, message)
|
||||||
result = ugettext(msg_with_ctxt)
|
result = gettext(msg_with_ctxt)
|
||||||
if CONTEXT_SEPARATOR in result:
|
if CONTEXT_SEPARATOR in result:
|
||||||
# Translation not found
|
# Translation not found
|
||||||
# force str, because the lazy version expects str.
|
# force str, because the lazy version expects str.
|
||||||
|
@ -371,17 +362,14 @@ def ngettext(singular, plural, number):
|
||||||
return do_ntranslate(singular, plural, number, 'ngettext')
|
return do_ntranslate(singular, plural, number, 'ngettext')
|
||||||
|
|
||||||
|
|
||||||
ungettext = ngettext
|
|
||||||
|
|
||||||
|
|
||||||
def npgettext(context, singular, plural, number):
|
def npgettext(context, singular, plural, number):
|
||||||
msgs_with_ctxt = ("%s%s%s" % (context, CONTEXT_SEPARATOR, singular),
|
msgs_with_ctxt = ("%s%s%s" % (context, CONTEXT_SEPARATOR, singular),
|
||||||
"%s%s%s" % (context, CONTEXT_SEPARATOR, plural),
|
"%s%s%s" % (context, CONTEXT_SEPARATOR, plural),
|
||||||
number)
|
number)
|
||||||
result = ungettext(*msgs_with_ctxt)
|
result = ngettext(*msgs_with_ctxt)
|
||||||
if CONTEXT_SEPARATOR in result:
|
if CONTEXT_SEPARATOR in result:
|
||||||
# Translation not found
|
# Translation not found
|
||||||
result = ungettext(singular, plural, number)
|
result = ngettext(singular, plural, number)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1011,10 +1011,11 @@ appropriate entities.
|
||||||
For a complete discussion on the usage of the following see the
|
For a complete discussion on the usage of the following see the
|
||||||
:doc:`translation documentation </topics/i18n/translation>`.
|
:doc:`translation documentation </topics/i18n/translation>`.
|
||||||
|
|
||||||
|
The ``u`` prefix on the functions below comes from a difference in Python 2
|
||||||
|
between unicode and bytestrings. If your code doesn't support Python 2, use the
|
||||||
|
functions without the ``u``.
|
||||||
|
|
||||||
.. function:: gettext(message)
|
.. function:: gettext(message)
|
||||||
|
|
||||||
Translates ``message`` and returns it in a UTF-8 bytestring.
|
|
||||||
|
|
||||||
.. function:: ugettext(message)
|
.. function:: ugettext(message)
|
||||||
|
|
||||||
Translates ``message`` and returns it as a string.
|
Translates ``message`` and returns it as a string.
|
||||||
|
@ -1042,19 +1043,15 @@ For a complete discussion on the usage of the following see the
|
||||||
later.
|
later.
|
||||||
|
|
||||||
.. function:: ngettext(singular, plural, number)
|
.. function:: ngettext(singular, plural, number)
|
||||||
|
|
||||||
Translates ``singular`` and ``plural`` and returns the appropriate string
|
|
||||||
based on ``number`` in a UTF-8 bytestring.
|
|
||||||
|
|
||||||
.. function:: ungettext(singular, plural, number)
|
.. function:: ungettext(singular, plural, number)
|
||||||
|
|
||||||
Translates ``singular`` and ``plural`` and returns the appropriate string
|
Translates ``singular`` and ``plural`` and returns the appropriate string
|
||||||
based on ``number`` as a string.
|
based on ``number``.
|
||||||
|
|
||||||
.. function:: npgettext(context, singular, plural, number)
|
.. function:: npgettext(context, singular, plural, number)
|
||||||
|
|
||||||
Translates ``singular`` and ``plural`` and returns the appropriate string
|
Translates ``singular`` and ``plural`` and returns the appropriate string
|
||||||
based on ``number`` and the ``context`` as a string.
|
based on ``number`` and the ``context``.
|
||||||
|
|
||||||
.. function:: ngettext_lazy(singular, plural, number)
|
.. function:: ngettext_lazy(singular, plural, number)
|
||||||
.. function:: ungettext_lazy(singular, plural, number)
|
.. function:: ungettext_lazy(singular, plural, number)
|
||||||
|
|
|
@ -52,6 +52,12 @@ Specify a translation string by using the function
|
||||||
:func:`~django.utils.translation.ugettext`. It's convention to import this
|
:func:`~django.utils.translation.ugettext`. It's convention to import this
|
||||||
as a shorter alias, ``_``, to save typing.
|
as a shorter alias, ``_``, to save typing.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
The ``u`` prefixing of ``gettext`` functions was originally to distinguish
|
||||||
|
usage between unicode strings and bytestrings on Python 2. For code that
|
||||||
|
supports only Python 3, they can be used interchangeably. A deprecation for
|
||||||
|
the prefixed functions may happen in a future Django release.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Python's standard library ``gettext`` module installs ``_()`` into the
|
Python's standard library ``gettext`` module installs ``_()`` into the
|
||||||
global namespace, as an alias for ``gettext()``. In Django, we have chosen
|
global namespace, as an alias for ``gettext()``. In Django, we have chosen
|
||||||
|
@ -428,24 +434,6 @@ strings before passing them to non-Django code::
|
||||||
|
|
||||||
requests.post('https://example.com/send', data={'body': str(body)})
|
requests.post('https://example.com/send', data={'body': str(body)})
|
||||||
|
|
||||||
If you try to use a ``ugettext_lazy()`` result where a bytestring (a
|
|
||||||
:class:`bytes` object) is expected, things won't work as expected since a
|
|
||||||
``ugettext_lazy()`` object doesn't know how to convert itself to a bytestring.
|
|
||||||
You can't use a string inside a bytestring, either, so this is consistent with
|
|
||||||
normal Python behavior. For example, putting a string proxy into a string is
|
|
||||||
fine::
|
|
||||||
|
|
||||||
"Hello %s" % ugettext_lazy("people")
|
|
||||||
|
|
||||||
But you can't insert a string into a bytestring and nor can you insert
|
|
||||||
a string proxy there::
|
|
||||||
|
|
||||||
b"Hello %s" % ugettext_lazy("people")
|
|
||||||
|
|
||||||
If you ever see output that looks like ``"hello
|
|
||||||
<django.utils.functional...>"``, you have tried to insert the result of
|
|
||||||
``ugettext_lazy()`` into a bytestring. That's a bug in your code.
|
|
||||||
|
|
||||||
If you don't like the long ``ugettext_lazy`` name, you can just alias it as
|
If you don't like the long ``ugettext_lazy`` name, you can just alias it as
|
||||||
``_`` (underscore), like so::
|
``_`` (underscore), like so::
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue