Merge pull request #1868 from Bouke/tickets/18419

Fixed #18149 -- Changed language codes for Chinese
This commit is contained in:
Aymeric Augustin 2013-11-04 14:17:34 -08:00
commit 859a20560e
17 changed files with 2593 additions and 2 deletions

View File

@ -127,6 +127,8 @@ LANGUAGES = (
('ur', gettext_noop('Urdu')), ('ur', gettext_noop('Urdu')),
('vi', gettext_noop('Vietnamese')), ('vi', gettext_noop('Vietnamese')),
('zh-cn', gettext_noop('Simplified Chinese')), ('zh-cn', gettext_noop('Simplified Chinese')),
('zh-hans', gettext_noop('Simplified Chinese')),
('zh-hant', gettext_noop('Traditional Chinese')),
('zh-tw', gettext_noop('Traditional Chinese')), ('zh-tw', gettext_noop('Traditional Chinese')),
) )

View File

@ -485,6 +485,18 @@ LANG_INFO = {
'name': 'Simplified Chinese', 'name': 'Simplified Chinese',
'name_local': '简体中文', 'name_local': '简体中文',
}, },
'zh-hans': {
'bidi': False,
'code': 'zh-hans',
'name': 'Simplified Chinese',
'name_local': '简体中文',
},
'zh-hant': {
'bidi': False,
'code': 'zh-hant',
'name': 'Traditional Chinese',
'name_local': '繁體中文',
},
'zh-tw': { 'zh-tw': {
'bidi': False, 'bidi': False,
'code': 'zh-tw', 'code': 'zh-tw',

View File

@ -1,5 +1,8 @@
# This file is distributed under the same license as the Django package. # This file is distributed under the same license as the Django package.
# #
# This is the *old* Simplified Chinese translation of Django
# For future updates please use the translation in the "zh_Hans" directory.
#
# Translators: # Translators:
# Jannis Leidel <jannis@leidel.info>, 2011. # Jannis Leidel <jannis@leidel.info>, 2011.
# Kevin Shi <leiarix@gmail.com>, 2012. # Kevin Shi <leiarix@gmail.com>, 2012.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

View File

@ -0,0 +1,24 @@
# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
from __future__ import unicode_literals
# The *_FORMAT strings use the Django date format syntax,
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
# DATE_FORMAT =
# TIME_FORMAT =
# DATETIME_FORMAT =
# YEAR_MONTH_FORMAT =
# MONTH_DAY_FORMAT =
# SHORT_DATE_FORMAT =
# SHORT_DATETIME_FORMAT =
# FIRST_DAY_OF_WEEK =
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
# DATE_INPUT_FORMATS =
# TIME_INPUT_FORMATS =
# DATETIME_INPUT_FORMATS =
# DECIMAL_SEPARATOR =
# THOUSAND_SEPARATOR =
# NUMBER_GROUPING =

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

View File

@ -0,0 +1,24 @@
# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
from __future__ import unicode_literals
# The *_FORMAT strings use the Django date format syntax,
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
# DATE_FORMAT =
# TIME_FORMAT =
# DATETIME_FORMAT =
# YEAR_MONTH_FORMAT =
# MONTH_DAY_FORMAT =
# SHORT_DATE_FORMAT =
# SHORT_DATETIME_FORMAT =
# FIRST_DAY_OF_WEEK =
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
# DATE_INPUT_FORMATS =
# TIME_INPUT_FORMATS =
# DATETIME_INPUT_FORMATS =
# DECIMAL_SEPARATOR =
# THOUSAND_SEPARATOR =
# NUMBER_GROUPING =

View File

@ -1,5 +1,8 @@
# This file is distributed under the same license as the Django package. # This file is distributed under the same license as the Django package.
# #
# This is the *old* Traditional Chinese translation of Django
# For future updates please use the translation in the "zh_Hant" directory.
#
# Translators: # Translators:
# <ilay@ilay.tw>, 2012. # <ilay@ilay.tw>, 2012.
# Jannis Leidel <jannis@leidel.info>, 2011. # Jannis Leidel <jannis@leidel.info>, 2011.

View File

@ -202,6 +202,17 @@ def activate(language):
language and installs it as the current translation object for the current language and installs it as the current translation object for the current
thread. thread.
""" """
if isinstance(language, basestring):
if language == 'zh-cn':
warnings.warn(
"The use of the language code 'zh-cn' is deprecated. "
"Please use the 'zh-hans' translation instead.",
PendingDeprecationWarning, stacklevel=2)
elif language == 'zh-tw':
warnings.warn(
"The use of the language code 'zh-tw' is deprecated. "
"Please use the 'zh-hant' translation instead.",
PendingDeprecationWarning, stacklevel=2)
_active.value = translation(language) _active.value = translation(language)
@ -399,6 +410,12 @@ def get_supported_language_variant(lang_code, supported=None, strict=False):
If `strict` is False (the default), the function will look for an alternative If `strict` is False (the default), the function will look for an alternative
country-specific variant when the currently checked is not found. country-specific variant when the currently checked is not found.
""" """
# some browsers use deprecated language codes -- #18419
if lang_code == 'zh-cn' and 'zh-hans' in supported:
return 'zh-hans'
elif lang_code == 'zh-tw' and 'zh-hant' in supported:
return 'zh-hant'
if supported is None: if supported is None:
from django.conf import settings from django.conf import settings
supported = OrderedDict(settings.LANGUAGES) supported = OrderedDict(settings.LANGUAGES)

View File

@ -476,6 +476,9 @@ these changes.
* The class ``django.utils.datastructures.MergeDict`` will be removed. * The class ``django.utils.datastructures.MergeDict`` will be removed.
* The ``zh_CN`` and ``zh_TW`` language codes will be removed and have been
replaced by the ``zh_Hans`` and ``zh_Hant`` language code respectively.
2.0 2.0
--- ---

View File

@ -697,3 +697,11 @@ deprecated and will be removed in Django 1.9.
arguments into a ``REQUEST`` property on ``WSGIRequest``. To merge arguments into a ``REQUEST`` property on ``WSGIRequest``. To merge
dictionaries, use ``dict.update()`` instead. The class ``MergeDict`` is dictionaries, use ``dict.update()`` instead. The class ``MergeDict`` is
deprecated and will be removed in Django 1.9. deprecated and will be removed in Django 1.9.
Language codes ``zh_CN`` and ``zh_TW``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The currently used language codes for Simplified Chinese ``zh_CN`` and
Traditional Chinese ``zh_TW`` are deprecated and should be replaced by the
recently introduced language codes ``zh_Hans`` and ``zh_Hant`` respectively.
The deprecated language codes will be removed in Django 1.9.

View File

@ -1,8 +1,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import warnings import warnings
from django.test import SimpleTestCase, RequestFactory from django.test import SimpleTestCase, RequestFactory, override_settings
from django.utils import six from django.utils import six, translation
from django.utils.deprecation import RenameMethodsBase from django.utils.deprecation import RenameMethodsBase
@ -186,3 +186,22 @@ class DeprecatingRequestMergeDictTest(SimpleTestCase):
'`request.POST` instead.', '`request.POST` instead.',
'`MergeDict` is deprecated, use `dict.update()` instead.', '`MergeDict` is deprecated, use `dict.update()` instead.',
]) ])
@override_settings(USE_I18N=True)
class DeprecatedChineseLanguageCodes(SimpleTestCase):
def test_deprecation_warning(self):
warnings.simplefilter('always')
with warnings.catch_warnings(record=True) as recorded:
with translation.override('zh-cn'):
pass
with translation.override('zh-tw'):
pass
msgs = [str(warning.message) for warning in recorded]
self.assertEqual(msgs, [
"The use of the language code 'zh-cn' is deprecated. "
"Please use the 'zh-hans' translation instead.",
"The use of the language code 'zh-tw' is deprecated. "
"Please use the 'zh-hant' translation instead.",
])

View File

@ -871,6 +871,31 @@ class MiscTests(TransRealMixin, TestCase):
r.META = {'HTTP_ACCEPT_LANGUAGE': 'zh-cn,de'} r.META = {'HTTP_ACCEPT_LANGUAGE': 'zh-cn,de'}
self.assertEqual(g(r), 'zh-cn') self.assertEqual(g(r), 'zh-cn')
@override_settings(
LANGUAGES=(
('en', 'English'),
('zh-hans', 'Simplified Chinese'),
('zh-hant', 'Traditional Chinese'),
)
)
def test_support_for_deprecated_chinese_language_codes(self):
"""
Some browsers (Firefox, IE etc) use deprecated language codes. As these
language codes will be removed in Django 1.9, these will be incorrectly
matched. For example zh-tw (traditional) will be interpreted as zh-hans
(simplified), which is wrong. So we should also accept these deprecated
language codes.
refs #18419 -- this is explicitly for browser compatibility
"""
g = get_language_from_request
r = self.rf.get('/')
r.COOKIES = {}
r.META = {'HTTP_ACCEPT_LANGUAGE': 'zh-cn,en'}
self.assertEqual(g(r), 'zh-hans')
r.META = {'HTTP_ACCEPT_LANGUAGE': 'zh-tw,en'}
self.assertEqual(g(r), 'zh-hant')
def test_parse_language_cookie(self): def test_parse_language_cookie(self):
""" """
Now test that we parse language preferences stored in a cookie correctly. Now test that we parse language preferences stored in a cookie correctly.