web/lib/django/utils/translation/__init__.py
author ymh <ymh.work@gmail.com>
Wed, 02 Jun 2010 18:57:35 +0200
changeset 38 77b6da96e6f1
permissions -rw-r--r--
update django
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
38
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
"""
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
Internationalization support.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
"""
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
from django.utils.encoding import force_unicode
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
from django.utils.functional import lazy, curry
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
__all__ = ['gettext', 'gettext_noop', 'gettext_lazy', 'ngettext',
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
        'ngettext_lazy', 'string_concat', 'activate', 'deactivate',
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
        'get_language', 'get_language_bidi', 'get_date_formats',
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
        'get_partial_date_formats', 'check_for_language', 'to_locale',
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
        'get_language_from_request', 'templatize', 'ugettext', 'ugettext_lazy',
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
        'ungettext', 'deactivate_all']
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
# Here be dragons, so a short explanation of the logic won't hurt:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
# We are trying to solve two problems: (1) access settings, in particular
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
# settings.USE_I18N, as late as possible, so that modules can be imported
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
# without having to first configure Django, and (2) if some other code creates
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
# a reference to one of these functions, don't break that reference when we
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
# replace the functions with their real counterparts (once we do access the
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
# settings).
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
def delayed_loader(real_name, *args, **kwargs):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
    """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
    Call the real, underlying function.  We have a level of indirection here so
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    that modules can use the translation bits without actually requiring
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
    Django's settings bits to be configured before import.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
    """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
    from django.conf import settings
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
    if settings.USE_I18N:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
        from django.utils.translation import trans_real as trans
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
    else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
        from django.utils.translation import trans_null as trans
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    # Make the originally requested function call on the way out the door.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
    return getattr(trans, real_name)(*args, **kwargs)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
g = globals()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
for name in __all__:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
    g['real_%s' % name] = curry(delayed_loader, name)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
del g, delayed_loader
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
def gettext_noop(message):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    return real_gettext_noop(message)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
ugettext_noop = gettext_noop
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
def gettext(message):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    return real_gettext(message)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
def ngettext(singular, plural, number):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
    return real_ngettext(singular, plural, number)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
def ugettext(message):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
    return real_ugettext(message)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
def ungettext(singular, plural, number):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
    return real_ungettext(singular, plural, number)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
ngettext_lazy = lazy(ngettext, str)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
gettext_lazy = lazy(gettext, str)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
ungettext_lazy = lazy(ungettext, unicode)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
ugettext_lazy = lazy(ugettext, unicode)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
def activate(language):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    return real_activate(language)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
def deactivate():
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    return real_deactivate()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
def get_language():
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
    return real_get_language()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
def get_language_bidi():
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
    return real_get_language_bidi()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
def get_date_formats():
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    return real_get_date_formats()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
def get_partial_date_formats():
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
    return real_get_partial_date_formats()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
def check_for_language(lang_code):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    return real_check_for_language(lang_code)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
def to_locale(language):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
    return real_to_locale(language)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
def get_language_from_request(request):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
    return real_get_language_from_request(request)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
def templatize(src):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
    return real_templatize(src)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
def deactivate_all():
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
    return real_deactivate_all()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
def _string_concat(*strings):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
    """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
    Lazy variant of string concatenation, needed for translations that are
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
    constructed from multiple parts.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
    """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
    return u''.join([force_unicode(s) for s in strings])
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
string_concat = lazy(_string_concat, unicode)