summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Garcia <garcia.marc@gmail.com>2009-08-08 15:29:30 +0000
committerMarc Garcia <garcia.marc@gmail.com>2009-08-08 15:29:30 +0000
commitac70e26bafb47f8a69aa805273724fba29ccc26f (patch)
tree3bea1b9bb80609474c53c852bb113e0fef0e63d4
parentb6ceeb15958958587df8ee600c026b2251e9c4e0 (diff)
[soc2009/i18n] tests improved, and bugs fixed on tests and because of tests
git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/i18n-improvements@11414 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/conf/global_settings.py3
-rw-r--r--django/conf/locale/ar/formats.py1
-rw-r--r--django/conf/locale/bg/formats.py1
-rw-r--r--django/conf/locale/bn/formats.py1
-rw-r--r--django/conf/locale/ca/formats.py1
-rw-r--r--django/conf/locale/cs/formats.py1
-rw-r--r--django/conf/locale/cy/formats.py1
-rw-r--r--django/conf/locale/da/formats.py1
-rw-r--r--django/conf/locale/de/formats.py1
-rw-r--r--django/conf/locale/el/formats.py1
-rw-r--r--django/conf/locale/en/formats.py1
-rw-r--r--django/conf/locale/es/formats.py1
-rw-r--r--django/conf/locale/es_AR/formats.py1
-rw-r--r--django/conf/locale/et/formats.py1
-rw-r--r--django/conf/locale/eu/formats.py1
-rw-r--r--django/conf/locale/fa/formats.py1
-rw-r--r--django/conf/locale/fi/formats.py1
-rw-r--r--django/conf/locale/fr/formats.py1
-rw-r--r--django/conf/locale/ga/formats.py1
-rw-r--r--django/conf/locale/gl/formats.py1
-rw-r--r--django/conf/locale/he/formats.py1
-rw-r--r--django/conf/locale/hi/formats.py1
-rw-r--r--django/conf/locale/hr/formats.py1
-rw-r--r--django/conf/locale/hu/formats.py1
-rw-r--r--django/conf/locale/is/formats.py1
-rw-r--r--django/conf/locale/it/formats.py1
-rw-r--r--django/conf/locale/ja/formats.py1
-rw-r--r--django/conf/locale/ka/formats.py1
-rw-r--r--django/conf/locale/km/formats.py1
-rw-r--r--django/conf/locale/kn/formats.py1
-rw-r--r--django/conf/locale/ko/formats.py1
-rw-r--r--django/conf/locale/lt/formats.py1
-rw-r--r--django/conf/locale/lv/formats.py1
-rw-r--r--django/conf/locale/mk/formats.py1
-rw-r--r--django/conf/locale/nb/formats.py1
-rw-r--r--django/conf/locale/nl/formats.py1
-rw-r--r--django/conf/locale/pl/formats.py1
-rw-r--r--django/conf/locale/pt/formats.py1
-rw-r--r--django/conf/locale/pt_BR/formats.py1
-rw-r--r--django/conf/locale/ro/formats.py1
-rw-r--r--django/conf/locale/ru/formats.py1
-rw-r--r--django/conf/locale/sk/formats.py1
-rw-r--r--django/conf/locale/sl/formats.py1
-rw-r--r--django/conf/locale/sr/formats.py1
-rw-r--r--django/conf/locale/sr_Latn/formats.py1
-rw-r--r--django/conf/locale/sv/formats.py1
-rw-r--r--django/conf/locale/ta/formats.py1
-rw-r--r--django/conf/locale/te/formats.py1
-rw-r--r--django/conf/locale/th/formats.py1
-rw-r--r--django/conf/locale/tr/formats.py1
-rw-r--r--django/conf/locale/uk/formats.py1
-rw-r--r--django/conf/locale/zh_CN/formats.py1
-rw-r--r--django/conf/locale/zh_TW/formats.py1
-rw-r--r--django/core/management/commands/importcldr.py3
-rw-r--r--django/forms/fields.py6
-rw-r--r--django/views/i18n.py2
-rw-r--r--tests/regressiontests/i18n/tests.py199
57 files changed, 209 insertions, 56 deletions
diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py
index 540eb0a6de..b21a8cabf1 100644
--- a/django/conf/global_settings.py
+++ b/django/conf/global_settings.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# Default Django settings. Override these with settings in the module
# pointed-to by the DJANGO_SETTINGS_MODULE environment variable.
@@ -75,7 +76,7 @@ LANGUAGES = (
('lt', gettext_noop('Lithuanian')),
('mk', gettext_noop('Macedonian')),
('nl', gettext_noop('Dutch')),
- ('no', gettext_noop('Norwegian')),
+ ('nb', gettext_noop(u'Norwegian Bokmål')),
('pl', gettext_noop('Polish')),
('pt', gettext_noop('Portuguese')),
('pt-br', gettext_noop('Brazilian Portuguese')),
diff --git a/django/conf/locale/ar/formats.py b/django/conf/locale/ar/formats.py
index 8a0f54d072..d8d627f820 100644
--- a/django/conf/locale/ar/formats.py
+++ b/django/conf/locale/ar/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/bg/formats.py b/django/conf/locale/bg/formats.py
index 20bfc826eb..045543a7ac 100644
--- a/django/conf/locale/bg/formats.py
+++ b/django/conf/locale/bg/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/bn/formats.py b/django/conf/locale/bn/formats.py
index 3d78d5c414..46e5da9392 100644
--- a/django/conf/locale/bn/formats.py
+++ b/django/conf/locale/bn/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/ca/formats.py b/django/conf/locale/ca/formats.py
index aec16aceb2..464882a6ae 100644
--- a/django/conf/locale/ca/formats.py
+++ b/django/conf/locale/ca/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/cs/formats.py b/django/conf/locale/cs/formats.py
index e8a9626f13..327e77e868 100644
--- a/django/conf/locale/cs/formats.py
+++ b/django/conf/locale/cs/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/cy/formats.py b/django/conf/locale/cy/formats.py
index 3b6f62a620..a58d81f479 100644
--- a/django/conf/locale/cy/formats.py
+++ b/django/conf/locale/cy/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/da/formats.py b/django/conf/locale/da/formats.py
index 049103489a..bc80c6d6dd 100644
--- a/django/conf/locale/da/formats.py
+++ b/django/conf/locale/da/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/de/formats.py b/django/conf/locale/de/formats.py
index 5c038a5598..aab1c86167 100644
--- a/django/conf/locale/de/formats.py
+++ b/django/conf/locale/de/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/el/formats.py b/django/conf/locale/el/formats.py
index a548ad09c9..d476ab3885 100644
--- a/django/conf/locale/el/formats.py
+++ b/django/conf/locale/el/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/en/formats.py b/django/conf/locale/en/formats.py
index 3ff8ee4201..3a507cd27e 100644
--- a/django/conf/locale/en/formats.py
+++ b/django/conf/locale/en/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/es/formats.py b/django/conf/locale/es/formats.py
index 5b2fe92300..349810f0fe 100644
--- a/django/conf/locale/es/formats.py
+++ b/django/conf/locale/es/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/es_AR/formats.py b/django/conf/locale/es_AR/formats.py
index a66be1f94b..6d71786415 100644
--- a/django/conf/locale/es_AR/formats.py
+++ b/django/conf/locale/es_AR/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/et/formats.py b/django/conf/locale/et/formats.py
index b7d2255eb7..b96420c0c1 100644
--- a/django/conf/locale/et/formats.py
+++ b/django/conf/locale/et/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/eu/formats.py b/django/conf/locale/eu/formats.py
index 1838808356..475f924fe8 100644
--- a/django/conf/locale/eu/formats.py
+++ b/django/conf/locale/eu/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/fa/formats.py b/django/conf/locale/fa/formats.py
index b25864fa9a..dc11281790 100644
--- a/django/conf/locale/fa/formats.py
+++ b/django/conf/locale/fa/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/fi/formats.py b/django/conf/locale/fi/formats.py
index 964f17c003..670e26841a 100644
--- a/django/conf/locale/fi/formats.py
+++ b/django/conf/locale/fi/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/fr/formats.py b/django/conf/locale/fr/formats.py
index 2ddbef6173..965f21304d 100644
--- a/django/conf/locale/fr/formats.py
+++ b/django/conf/locale/fr/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/ga/formats.py b/django/conf/locale/ga/formats.py
index 1bab609447..f177bb28d4 100644
--- a/django/conf/locale/ga/formats.py
+++ b/django/conf/locale/ga/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/gl/formats.py b/django/conf/locale/gl/formats.py
index 58a6f89d07..e0a95d5106 100644
--- a/django/conf/locale/gl/formats.py
+++ b/django/conf/locale/gl/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/he/formats.py b/django/conf/locale/he/formats.py
index 4d9d34c127..8d7c7f2a4a 100644
--- a/django/conf/locale/he/formats.py
+++ b/django/conf/locale/he/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/hi/formats.py b/django/conf/locale/hi/formats.py
index a678794bfc..6afa2581b9 100644
--- a/django/conf/locale/hi/formats.py
+++ b/django/conf/locale/hi/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/hr/formats.py b/django/conf/locale/hr/formats.py
index 05fdb0dc97..62d1a7edf5 100644
--- a/django/conf/locale/hr/formats.py
+++ b/django/conf/locale/hr/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/hu/formats.py b/django/conf/locale/hu/formats.py
index 3ecb69eeec..6ee2db0cd5 100644
--- a/django/conf/locale/hu/formats.py
+++ b/django/conf/locale/hu/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/is/formats.py b/django/conf/locale/is/formats.py
index bcff36bdd6..b6377db40b 100644
--- a/django/conf/locale/is/formats.py
+++ b/django/conf/locale/is/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/it/formats.py b/django/conf/locale/it/formats.py
index 150738be18..fe86b5bd70 100644
--- a/django/conf/locale/it/formats.py
+++ b/django/conf/locale/it/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/ja/formats.py b/django/conf/locale/ja/formats.py
index ab446214e6..853056d8da 100644
--- a/django/conf/locale/ja/formats.py
+++ b/django/conf/locale/ja/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/ka/formats.py b/django/conf/locale/ka/formats.py
index 59c9e20b69..da37b4d06f 100644
--- a/django/conf/locale/ka/formats.py
+++ b/django/conf/locale/ka/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/km/formats.py b/django/conf/locale/km/formats.py
index f1ab00740a..3736d574fb 100644
--- a/django/conf/locale/km/formats.py
+++ b/django/conf/locale/km/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/kn/formats.py b/django/conf/locale/kn/formats.py
index 9e934ddfda..fa7a7b9546 100644
--- a/django/conf/locale/kn/formats.py
+++ b/django/conf/locale/kn/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/ko/formats.py b/django/conf/locale/ko/formats.py
index b4bc8a8cc0..51986c7910 100644
--- a/django/conf/locale/ko/formats.py
+++ b/django/conf/locale/ko/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/lt/formats.py b/django/conf/locale/lt/formats.py
index 17536830d7..d9fb0c86f7 100644
--- a/django/conf/locale/lt/formats.py
+++ b/django/conf/locale/lt/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/lv/formats.py b/django/conf/locale/lv/formats.py
index 4e47c680d6..5dc211cfc0 100644
--- a/django/conf/locale/lv/formats.py
+++ b/django/conf/locale/lv/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/mk/formats.py b/django/conf/locale/mk/formats.py
index 210a686a18..746ac0ea9f 100644
--- a/django/conf/locale/mk/formats.py
+++ b/django/conf/locale/mk/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/nb/formats.py b/django/conf/locale/nb/formats.py
index e64a606d19..5896a7fff1 100644
--- a/django/conf/locale/nb/formats.py
+++ b/django/conf/locale/nb/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/nl/formats.py b/django/conf/locale/nl/formats.py
index c3feb3ed27..3fdf4d631a 100644
--- a/django/conf/locale/nl/formats.py
+++ b/django/conf/locale/nl/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/pl/formats.py b/django/conf/locale/pl/formats.py
index 54db5039dc..860a4a88ca 100644
--- a/django/conf/locale/pl/formats.py
+++ b/django/conf/locale/pl/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/pt/formats.py b/django/conf/locale/pt/formats.py
index f9513efb49..053a48af53 100644
--- a/django/conf/locale/pt/formats.py
+++ b/django/conf/locale/pt/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/pt_BR/formats.py b/django/conf/locale/pt_BR/formats.py
index 14653031ff..f30d5c4dfc 100644
--- a/django/conf/locale/pt_BR/formats.py
+++ b/django/conf/locale/pt_BR/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/ro/formats.py b/django/conf/locale/ro/formats.py
index d80371ef85..6d6e800467 100644
--- a/django/conf/locale/ro/formats.py
+++ b/django/conf/locale/ro/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/ru/formats.py b/django/conf/locale/ru/formats.py
index bf76c22056..9a9ee96561 100644
--- a/django/conf/locale/ru/formats.py
+++ b/django/conf/locale/ru/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/sk/formats.py b/django/conf/locale/sk/formats.py
index 425e8cf82d..1bc3549dcf 100644
--- a/django/conf/locale/sk/formats.py
+++ b/django/conf/locale/sk/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/sl/formats.py b/django/conf/locale/sl/formats.py
index 0537637be2..4007f10707 100644
--- a/django/conf/locale/sl/formats.py
+++ b/django/conf/locale/sl/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/sr/formats.py b/django/conf/locale/sr/formats.py
index 68f5993e15..b1aaa77deb 100644
--- a/django/conf/locale/sr/formats.py
+++ b/django/conf/locale/sr/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/sr_Latn/formats.py b/django/conf/locale/sr_Latn/formats.py
index a66be1f94b..6d71786415 100644
--- a/django/conf/locale/sr_Latn/formats.py
+++ b/django/conf/locale/sr_Latn/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/sv/formats.py b/django/conf/locale/sv/formats.py
index 4f75056583..df4e633562 100644
--- a/django/conf/locale/sv/formats.py
+++ b/django/conf/locale/sv/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/ta/formats.py b/django/conf/locale/ta/formats.py
index 85b9e49437..69fa17df33 100644
--- a/django/conf/locale/ta/formats.py
+++ b/django/conf/locale/ta/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/te/formats.py b/django/conf/locale/te/formats.py
index 5d3c384c48..e805872d52 100644
--- a/django/conf/locale/te/formats.py
+++ b/django/conf/locale/te/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/th/formats.py b/django/conf/locale/th/formats.py
index 3ab3661fd3..7091dc6b98 100644
--- a/django/conf/locale/th/formats.py
+++ b/django/conf/locale/th/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/tr/formats.py b/django/conf/locale/tr/formats.py
index 57b4e5605b..b97878865b 100644
--- a/django/conf/locale/tr/formats.py
+++ b/django/conf/locale/tr/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/uk/formats.py b/django/conf/locale/uk/formats.py
index 918062b79a..8e41bf020d 100644
--- a/django/conf/locale/uk/formats.py
+++ b/django/conf/locale/uk/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/zh_CN/formats.py b/django/conf/locale/zh_CN/formats.py
index a66be1f94b..6d71786415 100644
--- a/django/conf/locale/zh_CN/formats.py
+++ b/django/conf/locale/zh_CN/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/conf/locale/zh_TW/formats.py b/django/conf/locale/zh_TW/formats.py
index a66be1f94b..6d71786415 100644
--- a/django/conf/locale/zh_TW/formats.py
+++ b/django/conf/locale/zh_TW/formats.py
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#
diff --git a/django/core/management/commands/importcldr.py b/django/core/management/commands/importcldr.py
index ab8bd079bf..c4a13e6238 100644
--- a/django/core/management/commands/importcldr.py
+++ b/django/core/management/commands/importcldr.py
@@ -11,7 +11,8 @@ except ImportError:
raise CommandError('You need to install `python-lxml` to run this script')
FORMATS_FILE_NAME = 'formats.py'
-FORMATS_FILE_HEADER = '''# This file is distributed under the same license as the Django package.
+FORMATS_FILE_HEADER = '''# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
#
'''
diff --git a/django/forms/fields.py b/django/forms/fields.py
index b4f454dd40..c9a069edfd 100644
--- a/django/forms/fields.py
+++ b/django/forms/fields.py
@@ -210,7 +210,8 @@ class FloatField(Field):
return None
try:
# We always accept dot as decimal separator
- value = float(value.replace(getformat('DECIMAL_SEPARATOR'), '.'))
+ if isinstance(value, str) or isinstance(value, unicode):
+ value = float(value.replace(getformat('DECIMAL_SEPARATOR'), '.'))
except (ValueError, TypeError):
raise ValidationError(self.error_messages['invalid'])
if self.max_value is not None and value > self.max_value:
@@ -247,7 +248,8 @@ class DecimalField(Field):
value = smart_str(value).strip()
try:
# We always accept dot as decimal separator
- value = Decimal(value.replace(getformat('DECIMAL_SEPARATOR'), '.'))
+ if isinstance(value, str) or isinstance(value, unicode):
+ value = Decimal(value.replace(getformat('DECIMAL_SEPARATOR'), '.'))
except DecimalException:
raise ValidationError(self.error_messages['invalid'])
diff --git a/django/views/i18n.py b/django/views/i18n.py
index e70cd3eca3..4a19e4b31c 100644
--- a/django/views/i18n.py
+++ b/django/views/i18n.py
@@ -208,7 +208,7 @@ def javascript_catalog(request, domain='djangojs', packages=None):
for k, v in pdict.items():
src.append("catalog['%s'] = [%s];\n" % (javascript_quote(k), ','.join(["''"]*(v+1))))
for k, v in get_formats().items():
- src.append("catalog['%s'] = '%s';\n" % (javascript_quote(k), javascript_quote(unicode(v))))
+ src.append("catalog['%s'] = '%s';\n" % (javascript_quote(k), javascript_quote(unicode(v)).encode('utf-8')))
src.extend(csrc)
src.append(LibFoot)
src.append(InterPolate)
diff --git a/tests/regressiontests/i18n/tests.py b/tests/regressiontests/i18n/tests.py
index 0ec72dc440..eb19e7f4d3 100644
--- a/tests/regressiontests/i18n/tests.py
+++ b/tests/regressiontests/i18n/tests.py
@@ -69,11 +69,17 @@ Localization of dates and numbers
>>> import datetime
>>> import decimal
+>>> from django.conf import settings
>>> from django.utils.formats import getformat, date_format, number_format, localize
+>>> from django.utils.numberformat import format
>>> from django import template
>>> from django import forms
>>> from django.forms.extras import SelectDateWidget
+>>> old_use_i18n = settings.USE_I18N
+>>> old_use_format_i18n = settings.USE_FORMAT_I18N
+>>> old_use_thousand_separator = settings.USE_THOUSAND_SEPARATOR
+
>>> n = decimal.Decimal('66666.666')
>>> f = 99999.999
>>> d = datetime.date(2009, 12, 31)
@@ -88,14 +94,23 @@ Localization of dates and numbers
Locale independent
->>> number_format(n, decimal_sep='.', decimal_pos=2, grouping=3, thousand_sep=',')
-'66,666.66'
->>> number_format(n, decimal_sep='A', decimal_pos=1, grouping=1, thousand_sep='B')
-'6B6B6B6B6BA6'
+>>> settings.USE_FORMAT_I18N = True
+>>> settings.USE_THOUSAND_SEPARATOR = False
+>>> format(n, decimal_sep='.', decimal_pos=2, grouping=3, thousand_sep=',')
+u'66666.66'
+>>> format(n, decimal_sep='A', decimal_pos=1, grouping=1, thousand_sep='B')
+u'66666A6'
+>>> settings.USE_THOUSAND_SEPARATOR = True
+>>> format(n, decimal_sep='.', decimal_pos=2, grouping=3, thousand_sep=',')
+u'66,666.66'
+>>> format(n, decimal_sep='A', decimal_pos=1, grouping=1, thousand_sep='B')
+u'6B6B6B6B6A6'
-English locale
+Catalan locale with format i18n disabled
+translations will be used, but not formats
->>> activate('en')
+>>> settings.USE_FORMAT_I18N = False
+>>> activate('ca')
>>> getformat('DATE_FORMAT')
'N j, Y'
>>> getformat('FIRST_DAY_OF_WEEK')
@@ -103,40 +118,102 @@ English locale
>>> getformat('DECIMAL_SEPARATOR')
'.'
>>> date_format(d)
-'December 31, 2009'
+u'des. 31, 2009'
>>> date_format(d, 'YEAR_MONTH_FORMAT')
-'December 2009'
->>> date_format(d, 'SHORT_DATETIME_FORMAT')
-'12/31/2009 8:50 p.m.'
+u'desembre 2009'
+>>> date_format(dt, 'SHORT_DATETIME_FORMAT')
+u'12/31/2009 8:50 p.m.'
>>> localize('No localizable')
'No localizable'
>>> localize(n)
-'66666.666'
+Decimal('66666.666')
>>> localize(f)
-'99999.999'
+99999.999
>>> localize(d)
-'December 31, 2009'
+datetime.date(2009, 12, 31)
>>> localize(dt)
-'December 31, 2009, 8:50 p.m.'
+datetime.datetime(2009, 12, 31, 20, 50)
>>> template.Template('{{ n }}').render(ctxt)
-'66666.666'
+u'66666.666'
>>> template.Template('{{ f }}').render(ctxt)
-'99999.999'
+u'99999.999'
>>> template.Template('{{ d }}').render(ctxt)
-'December 31, 2009'
+u'desembre 31, 2009'
>>> template.Template('{{ dt }}').render(ctxt)
-'December 31, 2009, 8:50 p.m.'
+u'desembre 31, 2009, 8:50 p.m.'
>>> template.Template('{{ n|floatformat:2 }}').render(ctxt)
-'66666.66'
+u'66666.67'
>>> template.Template('{{ f|floatformat }}').render(ctxt)
-'99999.9'
+u'100000.0'
>>> template.Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(ctxt)
-'12/31/2009'
+u'12/31/2009'
>>> template.Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(ctxt)
-'12/31/2009 8:50 p.m.'
->>> form = I18nForm({'decimal_field': u'66666.666', 'float_field': u'99999.999', 'date_field': u'12/31/2009', 'datetime_field': u'12/31/2009 20:50', 'time_field': u'20:50'})
+u'12/31/2009 8:50 p.m.'
+>>> form = I18nForm({'decimal_field': u'66666,666', 'float_field': u'99999,999', 'date_field': u'12/31/2009', 'datetime_field': u'12/31/2009 20:50', 'time_field': u'20:50'})
+>>> form.is_valid()
+False
+>>> SelectDateWidget().render('mydate', datetime.date(2009, 12, 31))
+u'<select name="mydate_month" id="id_mydate_month">\n<option value="1">gener</option>\n<option value="2">febrer</option>\n<option value="3">mar\xe7</option>\n<option value="4">abril</option>\n<option value="5">maig</option>\n<option value="6">juny</option>\n<option value="7">juliol</option>\n<option value="8">agost</option>\n<option value="9">setembre</option>\n<option value="10">octubre</option>\n<option value="11">novembre</option>\n<option value="12" selected="selected">desembre</option>\n</select>\n<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>'
+
+Catalan locale
+
+>>> settings.USE_FORMAT_I18N = True
+>>> activate('ca')
+>>> getformat('DATE_FORMAT')
+'j \de N \de Y'
+>>> getformat('FIRST_DAY_OF_WEEK')
+1
+>>> getformat('DECIMAL_SEPARATOR')
+','
+>>> date_format(d)
+u'31 de desembre de 2009'
+>>> date_format(d, 'YEAR_MONTH_FORMAT')
+u'desembre de 2009'
+>>> date_format(dt, 'SHORT_DATETIME_FORMAT')
+u'31/12/2009 20:50'
+>>> localize('No localizable')
+'No localizable'
+>>> settings.USE_THOUSAND_SEPARATOR = True
+>>> localize(n)
+u'66.666,666'
+>>> localize(f)
+u'99.999,999'
+>>> settings.USE_THOUSAND_SEPARATOR = False
+>>> localize(n)
+u'66666,666'
+>>> localize(f)
+u'99999,999'
+>>> localize(d)
+u'31 de desembre de 2009'
+>>> localize(dt)
+u'31 de desembre de 2009 a les 20:50'
+>>> settings.USE_THOUSAND_SEPARATOR = True
+>>> template.Template('{{ n }}').render(ctxt)
+u'66.666,666'
+>>> template.Template('{{ f }}').render(ctxt)
+u'99.999,999'
+>>> settings.USE_THOUSAND_SEPARATOR = False
+>>> template.Template('{{ n }}').render(ctxt)
+u'66666,666'
+>>> template.Template('{{ f }}').render(ctxt)
+u'99999,999'
+>>> template.Template('{{ d }}').render(ctxt)
+u'31 de desembre de 2009'
+>>> template.Template('{{ dt }}').render(ctxt)
+u'31 de desembre de 2009 a les 20:50'
+>>> template.Template('{{ n|floatformat:2 }}').render(ctxt)
+u'66666,67'
+>>> template.Template('{{ f|floatformat }}').render(ctxt)
+u'100000,0'
+>>> template.Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(ctxt)
+u'31/12/2009'
+>>> template.Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(ctxt)
+u'31/12/2009 20:50'
+>>> form = I18nForm({'decimal_field': u'66666,666', 'float_field': u'99999,999', 'date_field': u'31/12/2009', 'datetime_field': u'31/12/2009 20:50', 'time_field': u'20:50'})
+>>> form.is_valid()
+True
>>> form.cleaned_data['decimal_field']
-decimal.Decimal('66666.666')
+Decimal('66666.666')
>>> form.cleaned_data['float_field']
99999.999
>>> form.cleaned_data['date_field']
@@ -146,54 +223,67 @@ datetime.datetime(2009, 12, 31, 20, 50)
>>> form.cleaned_data['time_field']
datetime.time(20, 50)
>>> SelectDateWidget().render('mydate', datetime.date(2009, 12, 31))
-u'<select name="mydate_month" id="id_mydate_month">\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12" selected="selected">December</option>\n</select>\n<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>'
+u'<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_month" id="id_mydate_month">\n<option value="1">gener</option>\n<option value="2">febrer</option>\n<option value="3">mar\xe7</option>\n<option value="4">abril</option>\n<option value="5">maig</option>\n<option value="6">juny</option>\n<option value="7">juliol</option>\n<option value="8">agost</option>\n<option value="9">setembre</option>\n<option value="10">octubre</option>\n<option value="11">novembre</option>\n<option value="12" selected="selected">desembre</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>'
-Catalan locale
+English locale
->>> activate('ca')
+>>> settings.USE_FORMAT_I18N = True
+>>> activate('en')
>>> getformat('DATE_FORMAT')
-'j \de N \de Y'
+'N j, Y'
>>> getformat('FIRST_DAY_OF_WEEK')
-1
+0
>>> getformat('DECIMAL_SEPARATOR')
-','
+'.'
>>> date_format(d)
-'31 de desembre de 2009'
+u'Dec. 31, 2009'
>>> date_format(d, 'YEAR_MONTH_FORMAT')
-'desembre de 2009'
->>> date_format(d, 'SHORT_DATETIME_FORMAT')
-'31/12/2009 20:50'
+u'December 2009'
+>>> date_format(dt, 'SHORT_DATETIME_FORMAT')
+u'12/31/2009 8:50 p.m.'
>>> localize('No localizable')
'No localizable'
+>>> settings.USE_THOUSAND_SEPARATOR = True
+>>> localize(n)
+u'66,666.666'
+>>> localize(f)
+u'99,999.999'
+>>> settings.USE_THOUSAND_SEPARATOR = False
>>> localize(n)
-'66.666,666'
+u'66666.666'
>>> localize(f)
-'99.999,999'
+u'99999.999'
>>> localize(d)
-'31 de desembre de 2009'
+u'Dec. 31, 2009'
>>> localize(dt)
-'31 de desembre de 2009 a les 20:50'
->>> tplt.render(ctxt)
-'66.666,666 # 99.999,999 # 6 de juliol de 2009 # 6 de juliol de 2009 a les 20:50'
+u'Dec. 31, 2009, 8:50 p.m.'
+>>> settings.USE_THOUSAND_SEPARATOR = True
+>>> template.Template('{{ n }}').render(ctxt)
+u'66,666.666'
+>>> template.Template('{{ f }}').render(ctxt)
+u'99,999.999'
+>>> settings.USE_THOUSAND_SEPARATOR = False
>>> template.Template('{{ n }}').render(ctxt)
-'66666,666'
+u'66666.666'
>>> template.Template('{{ f }}').render(ctxt)
-'99999,999'
+u'99999.999'
>>> template.Template('{{ d }}').render(ctxt)
-'31 de desembre de 2009'
+u'Dec. 31, 2009'
>>> template.Template('{{ dt }}').render(ctxt)
-'31 de desembre de 2009 a les 20:50'
+u'Dec. 31, 2009, 8:50 p.m.'
>>> template.Template('{{ n|floatformat:2 }}').render(ctxt)
-'66666,66'
+u'66666.67'
>>> template.Template('{{ f|floatformat }}').render(ctxt)
-'99999,9'
+u'100000.0'
>>> template.Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(ctxt)
-'31/12/2009'
+u'12/31/2009'
>>> template.Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(ctxt)
-'31/12/2009 20:50'
->>> form = I18nForm({'decimal_field': u'66666,666', 'float_field': u'99999,999', 'date_field': u'31/12/2009', 'datetime_field': u'31/12/2009 20:50', 'time_field': u'20:50'})
+u'12/31/2009 8:50 p.m.'
+>>> form = I18nForm({'decimal_field': u'66666.666', 'float_field': u'99999.999', 'date_field': u'12/31/2009', 'datetime_field': u'12/31/2009 20:50', 'time_field': u'20:50'})
+>>> form.is_valid()
+True
>>> form.cleaned_data['decimal_field']
-decimal.Decimal('66666.666')
+Decimal('66666.666')
>>> form.cleaned_data['float_field']
99999.999
>>> form.cleaned_data['date_field']
@@ -203,7 +293,14 @@ datetime.datetime(2009, 12, 31, 20, 50)
>>> form.cleaned_data['time_field']
datetime.time(20, 50)
>>> SelectDateWidget().render('mydate', datetime.date(2009, 12, 31))
-u'<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_month" id="id_mydate_month">\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12" selected="selected">December</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>'
+u'<select name="mydate_month" id="id_mydate_month">\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12" selected="selected">December</option>\n</select>\n<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>'
+
+Restore defaults
+
+>>> settings.USE_I18N = old_use_i18n
+>>> settings.USE_FORMAT_I18N = old_use_format_i18n
+>>> settings.USE_THOUSAND_SEPARATOR = old_use_thousand_separator
+>>> deactivate()
"""